2016-08-08 20 views
2

を解析する方法:期待BEGIN_OBJECTしかしだった:私は内部配列を解析することができますどのように私はJSON持っている内部の配列JSON

{ 
    "id": 1, 
    "result": [ 
    { 
     "id": 1, 
     "imgUrl": "http://test.com/image.jpg", 
     "title": "image" 
    }, 
    { 
     "id": 2, 
     "imgUrl": "http://test.com/image2.jpg", 
     "title": "image2" 
    } 
    ], 
    "jsonrpc": "2.0" 
} 

を、私はデフォルトretroif gsonモデル

public class TestRequest { 

    public int id; 
    public List<ArrayItems> result; 
    public String jsonrpc;  
} 

public class Item { 

    public int id; 
    public String imgUrl; 
    public String title; 
} 

を使用して解析すると、私はエラーを持ってしてみてくださいBEGIN_ARRAY。 は、その後、私は手を試してみてください

Item[] items = GSON.fromJson(json, Item[].class); 

を解析し、エラーを持っている:

Expected BEGIN_ARRAY but was BEGIN_OBJECT.

は、私たちは何をする何を持っていますか?

答えて

3

主な問題は、あなたのPOJOList<Item>を持っていて、何が一致しない、パーサーにItem[].classを渡すことです。とにかく

Item[] items = GSON.fromJson(json, Item[].class); 
//         ↑ here!!!! 

、私見これは、あなたがこのJSONをパースする必要があり、正しい方法ではありません。

  • あなたは3個のタグ(idresultjsonrpc)を含む主な目的とJSONレスポンスを持っています。
  • あなたはこのメインオブジェクト(TestRequest

Soooooooo ....

ITを使用することを表すJavaのPOJOのようなものを作成しました!

これによれば、メインオブジェクトを解析すると、すべてのjsonコンテンツが得られます。

TestRequest data = gson.fromJson(reader, TestRequest.class); 

今、優しい出力を持つことが、私はこのようにItem::toString()をオーバーライドし、それをテストすることができます:

class Item { 

    public int id; 
    public String imgUrl; 
    public String title; 

    @Override 
    public String toString() { 
     return this.id + "-" + this.title; 
    } 
} 

そして、私はこのmain方法で使用してテスト:

final String FILE_PATH  = "C:\\tmp\\38830664.json"; // use your own!!! 

Gson gson = new Gson(); 
JsonReader reader = new JsonReader(new FileReader(FILE_PATH)); 
TestRequest data = gson.fromJson(reader, TestRequest.class); 

for (Item i :data.result) 
    System.out.println(i); 

OUTPUTを:

1-image 
2-image2 
+1

ありがとうございました! –

関連する問題