Android 反序列化JSON数组(GSON)中的不同对象
我从服务器获得的Android 反序列化JSON数组(GSON)中的不同对象,android,json,gson,json-deserialization,Android,Json,Gson,Json Deserialization,我从服务器获得的getUsers的JSON结果如下所示: { "result": [ { "meta": { "rows": "3" } }, { "items": [ { "id": "1", "name": "Steve", "age": "30" }, { "id": "2",
getUsers
的JSON结果如下所示:
{
"result": [
{
"meta": {
"rows": "3"
}
},
{
"items": [
{
"id": "1",
"name": "Steve",
"age": "30"
},
{
"id": "2",
"name": "Mary",
"age": "29"
},
{
"id": "3",
"name": "Bill",
"age": "58"
}
]
}
]
}
我如何在我的android应用程序中通过GSON反序列化它(我正在使用改型)?由于
result
中的对象类型不同,我无法想象有任何包装器类任何帮助都将不胜感激 举个好例子 换句话说,您可以将json转换为java对象 请使用org.json库 那么比如说
json = new JSONObject(YOUR_JSON).getJSONObject("result");
JSONArray items = data.getJSONArray("items");
String name = items.getJSONObject(0).getString("name");
您可以为将(反)序列化到(来自)数组的类型编写TypeAdapter。您甚至可以将其设置为泛型,这样它就可以处理
Pair-it(反)序列化Entry
到(从数组)。
免责声明-我没有编写或测试该代码,但它似乎是合法的
如果您只遇到过一次这样的问题(如在您的示例中),您可能不需要麻烦将其设置为泛型,只需为两个不同类的特定对编写TypeAdapter即可。阅读代码非常简单:
in.beginArray();
SomeClass1 info1 = gson.getAdapter(SomeClass1.class).read(in);
SomeClass2 info2 = gson.getAdapter(SomeClass2.class).read(in);
in.endArray();
return new SomeContainerClass(info1, info2);
(请参阅)我正在使用改装来反序列化。因此,我创建了一个Meta
类和一个UserList
类,其中包含列表项
,但我无法将它们放入这个奇怪的数组中。那么,这是怎么回事呢?你解决问题了吗?如果是,请选择一个答案并接受它,或者如果您以不同的方式解决了它,请编写您自己的答案。我创建了一个通过JSON的TypeAdapterFactory
。API更改时,我大约完成了70%。新的API有一个“正常”结构,所以我不再需要自定义解析。但为了解决这个问题,我计划在有空的时候计算出最后30%的收益。我会把结果贴在这里。