【问题标题】:Parse json use JsonOjbect vs map into entity with GSon使用 JsonOjbect 解析 json 与使用 GSon 映射到实体
【发布时间】:2012-11-20 03:21:20
【问题描述】:

我正在寻找使用 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 字符串,我需要从中获取数据。我该怎么办?

【问题讨论】:

    标签: java json gson


    【解决方案1】:

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

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

    【讨论】:

    • 对不起,你能解释一下GSON_DOMGSON_STREAM吗?我不知道它们是什么。我的问题中有第一个和第二个吗?
    • 第一种方法是GSON_DOM,第二种方法是GSON_BIND
    • 谢谢,我明白了。让我试试你的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2011-02-12
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多