web-dev-qa-db-fra.com

GSON - JsonSyntaxException - Nom attendu à la ligne 7, colonne 4

J'ai la classe de résultat suivante dont l'objet doit être renvoyé en tant que JSON.

public class Result {
    public String objectid;
    public String dtype;
    public String type;
    public String name;
    public String description;

    public Result() {
        this.objectid = "";
        this.dtype= "";
        this.type="";
        this.name= "";
        this.description = "";
    }

    public String getObjectid() {
        return objectid;
    }

    public void setObjectid(String s) {
        this.objectid = s;
    }

    public String getDtype() {
        return dtype;
    }

    public void setDtype(String s) {
        this.dtype= s;
    }

    public String getType() {
        return type;
    }

    public void setType(String s) {
        this.type = s;
    }

    public String getName() {
        return name;
    }

    public void setName(String s) {
        this.name = s;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String s) {
        this.description = s;
    }

}

J'ai une configuration JSON qui est lue dans le .Java principal et renvoyée sous forme de json sous le nom HTTP RESPONSE. C'est comme ci-dessous:

{
        "objectid" : "test",
        "dtype" : "test",
        "type" : "test",
        "name" : "test",
        "description" : "test" // removed
},
{
        "objectid" : "test",
        "dtype" : "test",
        "type" : "test",
        "name" : "test",
        "description" : "test"
}

Main .Java

En utilisant Gson, il lit le fichier configuration.json et doit renvoyer un json.

Mon code:

Gson g = new Gson();
Result r = g.fromJson(res.toString(), Result.class);

res.toString() obtient le contenu du fichier configuration.json sous forme de chaîne.

Mon problème:

Je rencontre l'exception suivante:

Exception com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: utilisez JsonReader.setLenient (true) pour accepter le code JSON malformé à la ligne 7, colonne 3.
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: utilisez JsonReader.setLenient (true) pour accepter le code JSON malformé à la ligne 7, colonne 3.

Des pointeurs?

9
Namenoobie

Si c'est le cas, vous avez une virgule supplémentaire et une faute d'orthographe. L'erreur indique que vous avez une mauvaise syntaxe JSON. C'est donc probablement l'un des premiers endroits à regarder.

{
            "objectid" : "test",
            "dtype" : "test",
            "type" : "test",
            "name " : "test",
            "description" : "test", //delete this comma
            },
            {
            "objectid" : "test",
            "dtyoe" : "test",  // spelling error
            "type" : "test",
            "name " : "test",
            "description" : "test"
    }

Vous semblez également analyser deux objets et indiquer à gson que vous voulez un objet résultat. Envisagez d’analyser les objets séparément ou dites à gson que vous voulez un tableau de résultats.

14
CBIII

utilisation 

catch(JsonSyntaxException e)

au lieu de 

catch(MalformedJsonException e)

car MalformedJsonException est une exception interne, alors que JsonSyntaxException est celle qui est réellement levée. voici un extrait de code

            String response="Something";
            JsonElement my_json;
            try {
                my_json=jsonParser.parse(response);
            } catch(JsonSyntaxException e) {
                e.printStackTrace();
                JsonReader reader = new JsonReader(new StringReader(response));
                reader.setLenient(true);
                my_json=jsonParser.parse(reader);
            }
3
Muayyad Alsadi

Vous avez deux objets mais obtenez un objet de GSON. soit vous devez utiliser le format ci-dessous de chaîne JSON pour obtenir l'objet Result à partir de cette chaîne JSON.

{
    "objectid" : "test",
    "dtype" : "test",
    "type" : "test",
    "name" : "test",
    "description" : "test" 

}

Deuxième option :-

Vous devrez changer le format de chaîne JSON. vous devrez le changer dans un tableau JSON et obtenir ArrayList de cet objet. Après cela, nous pouvons obtenir un objet Result à l'aide de la liste de tableaux index.new La chaîne JSON serait comme ceci.

    {"resultArray":[{
    "objectid" : "test",
    "dtype" : "test",
    "type" : "test",
    "name" : "test",
    "description" : "test" 
           },
      {
    "objectid" : "test",
    "dtype" : "test",
    "type" : "test",
    "name" : "test",
    "description" : "test"
        }]}

Et du code Java pour récupérer un objet de résultat.

Gson g = new Gson();
ResultList r = g.fromJson(res.toString(), ResultList.class);
ArrayList<Result> resultList = r.getResultList();
       for(int x=0 ;x<resultList.size();x++){
              Result result = resultList.get(x);
              }

Le modèle ResultList est: -

public class ResultList {
@SerializedName("resultArray")
public ArrayList<Result> resultList;
public getResultList(){
          return resultList;
           } 
       }

@Note: - Result.Java serait utilisé comme ci-dessus.

0
Ashish Saini