2017-05-06 6 views
0

Ok, ich weiß, dass viele Fragen wie diese gestellt wurden, aber ich habe eine spezifische Frage, die keiner der anderen hat. Ich möchte wissen, wie ich weiter nach JSON-Datei mit GSON analysieren würde.Erwartete BEGIN_ARRAY aber war BEGIN_OBJECT bei der Verwendung von GSON

{ 
     "BUYER": { 
       "IGN": "MGlolenstine", 
       "ProductID": "51" 
     }, 
     "BUYER": { 
       "IGN": "MGlolenstine", 
       "ProductID": "55" 
     }, 
     "BUYER": { 
       "IGN": "MGlolenstine", 
       "ProductID": "0" 
     }, 
     "BUYER": { 
       "IGN": "MGlolenstine", 
       "ProductID": "51" 
     }, 
     "BUYER": { 
       "IGN": "MGlolenstine", 
       "ProductID": "56" 
     } 
} 

, denn wenn ich diesen Code verwenden

Scanner scanner = new Scanner(new File(path)); 
String text = scanner.useDelimiter("\\A").next(); 
Gson gson = new GsonBuilder().create(); 
ArrayList<Purchases> p = gson.fromJson(new FileReader(path), Purchases.class); 
for(int i = 0; i < p.size(); i++){ 
    arg0.sendMessage(ChatColor.GOLD+"Player: "+p.get(i).BUYER.IGN); 
    arg0.sendMessage(ChatColor.GOLD+"ProductID: "+String.valueOf(p.get(i).BUYER.ProductID)); 
} 
scanner.close(); 

Ich erhalte den Fehler

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 2 column 12 

Hier nur die Klassen Entsendung ich für den JSON-Code haben

public class Purchases{ 
    PlayerRank BUYER; 
} 

public class PlayerRank{ 
    String IGN; 
    int ProductID; 
} 

Die Problem ist wahrscheinlich, dass ich nicht weiß, wie das JS ON-Arrays und -Objekte sehen so aus. Könnte jemand bitte den Unterschied zwischen JSONArray und JSONObject in meinem JSON-Code erklären?

Vielen Dank im Voraus.

EDIT: Also das ist die feste JSON

{ 
"buyers" : [ 
    { "IGN" : "MGlolenstine", "ProductID" : "51" }, 
    { "IGN" : "MGlolenstine", "ProductID" : "55" }, 
    { "IGN" : "MGlolenstine", "ProductID" : "0" }, 
    { "IGN" : "MGlolenstine", "ProductID" : "51" }, 
    { "IGN" : "MGlolenstine", "ProductID" : "56" } 
] 

}

Fest Java-Code:

Scanner scanner = new Scanner(new File(path)); 
String text = scanner.useDelimiter("\\A").next(); 
Gson gson = new GsonBuilder().create(); 
Purchases p = gson.fromJson(new FileReader(path), Purchases.class); 
for(int i = 0; i < p.buyers.length; i++){ 
    arg0.sendMessage(ChatColor.GOLD+"Player: "+p.buyers[i].IGN); 
    arg0.sendMessage(ChatColor.GOLD+"ProductID: "+String.valueOf(p.buyers[i].ProductID)); 
} 

Und schließlich die Klassen:

public class Purchases{ 
    PlayerRank buyers[]; 
} 

public class PlayerRank{ 
    String IGN; 
    int ProductID; 
} 

Vielen Dank an alle für die Hilfe!

+0

Können Sie die puchases Klasse schreiben. Neben dem, was ich über das JSON-Format geschrieben habe, muss die Klasse, die Sie an gson übergeben, die Datei spiegeln. – Juan

+0

Ich habe den Klassen-Teil in der Frage hinzugefügt. Danke für die Antwort –

Antwort

0

JSON Objekte sind direkt in geschweifte Klammern eingeschlossen {} vs. JSON-Arrays, die in eckigen Klammern [] in JSON-Objekten eingeschlossen sind.

Die Klassen Käufe und PlayerRank sollten auf diese Weise definiert werden:

public class Purchases{ 
    @SerializedName("buyers") protected ArrayList<PlayerRank> buyers; 

    ... 
} 

public class PlayerRank{ 
    @SerializedName("IGN") protected String ign; 
    @SerializedName("ProductID") protected int productId; 

    ... 
} 

Notiere die SerializedName Notation, die Sie den Namen der Objekte/Arrays in der JSON-Datei aus den Namen der Java-Eigenschaften entkoppeln lässt.

Das geschützte I, das zu den Eigenschaften hinzugefügt wurde, macht nur deutlich, was die ursprünglichen Klassen im ursprünglichen Code vorgaben.

Die JSON-Datei sollte wie folgt sein:

{ 
     "buyers" : [ 
      { "IGN": "MGlolenstine", "ProductID": "51"}, 
      { "IGN": "MGlolenstine", "ProductID": "55"}, 
      ... 
      { "IGN": "MGlolenstine", "ProductID": "56"} 
     ] 
} 

Und die JSON in eine Variable zu lesen:

Purchases p = gson.fromJson(new FileReader(path), Purchases.class); 
+0

Danke ... Wir werden es versuchen und Sie auf dem Laufenden halten! –

+0

JSON hinzugefügt. Können Sie das bitte überprüfen? Also werde ich wissen, dass ich dich richtig verstanden habe. –

+0

Danke. Ich habe den Arbeitscode und JSON hinzugefügt. –

Verwandte Themen