Parse json使用JsonOjbect vs map与GSon实体

时间:2012-11-20 03:21:20

标签: java json gson

我正在寻找解析json使用GSon库的正确方法。到目前为止,我已经知道了两种方法: 假设我有一个像这样的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...],
 }
  1. 使用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();
    
  2. 使用GSon映射到实体

    public class Container{
       List<Event> Events;
        List<Contact> Contacts;
    }
    
    Container c = new GSon().fromJSon(jsonString,Container.class);
    
  3. 你能告诉我何时应该使用第一种方式还是第二种方式? 我有一个Web服务可以返回多种复杂的json字符串,我需要从中获取数据。我该怎么办?

1 个答案:

答案 0 :(得分:0)

根据benchmarks,第一种方法(GSON_DOM)更快。这可能是因为使用DOM方法,您只是反序列化部分JSON字符串。如果你想要更高的性能,你可以切换到GSON_STREAM方法,这似乎在基准测试中做得最好。

实际上,第二种方法可以实现更简单的代码。如果我发现JSON反序列化需要花费大量时间,我可能会首先使用该方法然后切换到其他方法之一。