2017-05-06 16 views
0

[OK]をクリックすると、そのような質問の多くが尋ねられましたが、他の質問はありません。 GSONを使ってJSONファイルを解析するにはどうすればいいか知りたい。GSONを使用しているときにBEGIN_ARRAYが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の違いを説明できますか?

ありがとうございます。

EDITは:これは、固定された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; 

    ... 
} 

注あなたはJavaプロパティの名前からJSONファイル内のオブジェクト/配列の名前を切り離すことができますSerializedName表記。

プロパティに追加された保護された私は、元のコードで元のクラスがデフォルトにしたものを明示的にするだけです。

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を追加しました。 –

関連する問題