2017-05-06 163 views
0

好吧,我知道很多這樣的問題已經被問到,但我有一個具體的問題,其他問題都沒有。我想知道如何繼續使用GSON解析JSON文件。預期BEGIN_ARRAY,但是當使用GSON時BEGIN_OBJECT

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

,因爲當我使用此代碼

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

我得到的錯誤

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

這裏只是發表我的類的JSON代碼

public class Purchases{ 
    PlayerRank BUYER; 
} 

public class PlayerRank{ 
    String IGN; 
    int ProductID; 
} 

的問題可能是我不知道JS如何ON數組和對象看起來像。 有人能請解釋我的JSON代碼中的JSONArray和JSONObject的區別嗎?

預先感謝您。

編輯:所以這是固定的JSON

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

}

修正Java代碼:

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

最後是類:

public class Purchases{ 
    PlayerRank buyers[]; 
} 

public class PlayerRank{ 
    String IGN; 
    int ProductID; 
} 

感謝大家尋求幫助!

+0

你能後的Puchases類。除了我發佈的關於JSON格式的內容之外,您傳遞給gson的類必須鏡像文件。 – Juan

+0

我在問題中添加了類部分。感謝您的回覆 –

回答

0

JSON對象直接放在大括號{}與JSON對象內的方括號[]中的JSON數組中。

的類採購和PlayerRank應該這樣定義:

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

    ... 
} 

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

    ... 
} 

注意SerializedName符號,讓你分離從你的java屬性的名稱JSON文件中的對象/數組的名稱。

受保護的我添加到屬性只是使它明確什麼原始類默認的原始代碼。

的JSON文件應該是這樣的:

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

,並閱讀了JSON到一個變量:

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

謝謝...將嘗試並會讓你張貼! –

+0

增加了JSON。你能驗證它嗎?所以我會知道我正確地理解了你。 –

+0

謝謝。我添加了工作代碼和JSON。 –

相關問題