web-dev-qa-db-de.com

GSON - JsonSyntaxException - Erwarteter Name in Zeile 7, Spalte 4

Ich habe die folgende Ergebnisklasse, deren Objekt als JSON zurückgegeben werden soll.

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;
    }

}

Ich habe eine Konfiguration Json, die meine Haupt-.Java gelesen und als Json als HTTP-RESPONSE zurückgegeben wird. Es ist wie folgt:

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

Main .Java

Mit Gson liest es die Datei configuration.json und muss einen Json zurückgeben.

Mein Code:

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

dabei erhält res.toString() den Inhalt der Datei configuration.json als Zeichenfolge.

Mein Problem:

Ich erfahre die folgende Ausnahme:

Ausnahme com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Verwenden Sie JsonReader.setLenient (true), um in Zeile 7 Spalte 3 fehlerhaftes JSON zu akzeptieren
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Verwenden Sie JsonReader.setLenient (true), um fehlerhafte JSON in Zeile 7, Spalte 3, zu akzeptieren

Irgendwelche Hinweise?

9
Namenoobie

Wenn dies der eigentliche Json ist: Sie haben hier ein zusätzliches Komma und einen Schreibfehler. Der Fehler besagt, dass Sie eine schlechte Json-Syntax haben. Dies ist wahrscheinlich einer der ersten Orte, an denen man nachschauen kann.

{
            "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"
    }

Sie scheinen auch zwei Objekte zu analysieren und gson zu sagen, dass Sie ein Ergebnisobjekt daraus erhalten möchten. Sie können entweder die Objekte separat analysieren oder gson sagen, dass Sie ein Ergebnis-Array wünschen

14
CBIII

benutzen 

catch(JsonSyntaxException e)

anstatt 

catch(MalformedJsonException e)

weil MalformedJsonException eine interne Ausnahme ist, während JsonSyntaxException diejenige ist, die tatsächlich ausgelöst wird. Hier ist ein Code-Snippet

            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

Sie haben zwei Objekte, aber Sie erhalten ein Objekt von GSON. Entweder sollten Sie das Format des JSON-Strings unter dem folgenden verwenden, um das Ergebnisobjekt von diesem JSON-String abzurufen.

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

}

Zweite Option :-

Sie müssen das JSON-Stringformat ändern. Sie müssen es im JSON-Array ändern und ArrayList dieses Objekts abrufen. Danach können Sie das Ergebnisobjekt mithilfe der Array-Liste index abrufen. Ein neuer JSON-String würde folgendermaßen aussehen.

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

Und Java-Code zum Abrufen des Ergebnisobjekts.

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);
              }

ResultList Modell ist: -

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

@Note: - Result.Java wird wie oben angegeben verwendet.

0
Ashish Saini