使用 GSON 解析 JSON 数组
Posted
技术标签:
【中文标题】使用 GSON 解析 JSON 数组【英文标题】:Using GSON to parse a JSON array 【发布时间】:2013-08-27 14:49:05 【问题描述】:我有一个这样的 JSON 文件:
[
"number": "3",
"title": "hello_world",
,
"number": "2",
"title": "hello_world",
]
在文件有根元素之前,我会使用:
Wrapper w = gson.fromJson(JSONSTRING, Wrapper.class);
代码,但我想不出如何将Wrapper
类编码为根元素是一个数组。
我尝试过使用:
Wrapper[] wrapper = gson.fromJson(jsonLine, Wrapper[].class);
与:
public class Wrapper
String number;
String title;
但没有任何运气。使用这种方法我还能如何阅读?
P.S 我可以使用:
JsonArray entries = (JsonArray) new JsonParser().parse(jsonLine);
String title = ((JsonObject)entries.get(0)).get("title");
但我更愿意知道如何使用这两种方法(如果可能的话)。
【问题讨论】:
你确定标题元素后面有逗号吗?如果你删除它们Wrapper[] data = gson.fromJson(jElement, Wrapper[].class);
对我来说很好。
这就是问题所在.. 这么简单的错误!
【参考方案1】:
问题是由放在数组中的(在您的情况下为 每个)JSON 对象末尾的逗号引起的:
"number": "...",
"title": ".." , //<- see that comma?
如果您删除它们,您的数据将变为
[
"number": "3",
"title": "hello_world"
,
"number": "2",
"title": "hello_world"
]
和
Wrapper[] data = gson.fromJson(jElement, Wrapper[].class);
应该可以正常工作。
【讨论】:
@Snake 看看Google Gson - deserialize list<class> object? (generic type) @Snake BTW,如果jackson
库和this comment 创建数组并用Arrays.asList(..)
包装它比使用TypeRefence 创建列表要快。我没有使用 gson
库对其进行测试,但可能值得对其进行基准测试。【参考方案2】:
Gson gson = new Gson();
Wrapper[] arr = gson.fromJson(str, Wrapper[].class);
class Wrapper
int number;
String title;
似乎工作正常。但是你的字符串中有一个额外的,
逗号。
[
"number" : "3",
"title" : "hello_world"
,
"number" : "2",
"title" : "hello_world"
]
【讨论】:
【参考方案3】:public static <T> List<T> toList(String json, Class<T> clazz)
if (null == json)
return null;
Gson gson = new Gson();
return gson.fromJson(json, new TypeToken<T>().getType());
示例调用:
List<Specifications> objects = GsonUtils.toList(products, Specifications.class);
【讨论】:
对我来说,这是将我的对象变成 LinkedTreeMap 列表而不是规范对象列表(例如)。 你从哪里得到 GsonUtils 类的?GsonUtils
是他放置自己的toList()
方法的类。
这不起作用:TypeToken 必须创建一个错误的值,因为 T 在编译时是未知的。这可能会为 List【参考方案4】:
Wrapper[] data = gson.fromJson(jElement, Wrapper[].class);
【讨论】:
以上是关于使用 GSON 解析 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章
使用 Gson 解析后将嵌套的 JSON 数组插入 SQLite
一起Talk Android吧(第三百五十三回:Gson库解析JSON数组一)