我正在寻找使用 GSon 库解析 json 的正确方法。到目前为止,我已经知道了两种方法:
假设我有一个这样的 json 字符串:
{
'Events' : [{
'name' : 'exp',
'date' : '10-10-2010',
'tags' : ["tag 1", "tag2", "tag3"]
},...more events...],
'Contacts' : [{
'name' : 'John Smith',
'date' : '10-10-2010',
'tags' : ["tag 1", "tag2", "tag3"]
},...more contacts...],
}
使用 JSonOjbect 按名称获取字段:
JsonElement jelement = new JsonParser().parse(jsonLine); JsonObject jobject = jelement.getAsJsonObject(); jobject = jobject.getAsJsonArray("Events"); JsonArray jarray = jobject.getAsJsonArray("Contacts"); jobject = jarray.get(0).getAsJsonObject();
使用 GSon 映射到实体
public class Container{ List<Event> Events; List<Contact> Contacts; } Container c = new GSon().fromJSon(jsonString,Container.class);
你能告诉我什么时候应该使用第一种方式或第二种方式吗?
我有一个 Web 服务可以返回多种复杂的 json 字符串,我需要从中获取数据。我该怎么办?
根据基准测试,第一种方法(GSON_DOM
)更快。这可能是因为使用 DOM 方法,您只是反序列化 JSON 字符串的一部分。如果您想要更高的性能,您可以切换到GSON_STREAM
方法,这种方法在基准测试中似乎表现最好。
实际上,第二种方法使代码更简单。如果我发现 JSON 反序列化需要大量时间,我会先使用这种方法,然后切换到其他方法之一。