我有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_OBJECT但是BEGIN_ARRAY。 然后我尝试手工解析
Item[] items = GSON.fromJson(json, Item[].class);
并有错误:
预计BEGIN_ARRAY但是BEGIN_OBJECT。
我们该怎么做?
答案 0 :(得分:3)
主要问题是您的 POJO 中有List<Item>
,并且您将Item[].class
传递给解析器,但不匹配。
Item[] items = GSON.fromJson(json, Item[].class);
// ↑ here!!!!
无论如何,恕我直言,这不是解析这个Json的正确方法。
id
result
和jsonrpc
)。TestRequest
)... Soooooooo
根据这个,如果你解析主对象,你将拥有所有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);
<强>输出:强>
1-image
2-image2