Parse json use JsonOjbect vs map into entity with GSon



我正在寻找使用 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...],
 }
  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);
    

你能告诉我什么时候应该使用第一种方式或第二种方式吗?
我有一个 Web 服务可以返回多种复杂的 json 字符串,我需要从中获取数据。我该怎么办?

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

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

最新更新