【问题标题】:Jackson vs Gson for simple deserialisationJackson vs Gson 用于简单的反序列化
【发布时间】:2011-09-25 01:19:18
【问题描述】:

为了解析像this twitter API users/show response 这样的JSON,我一直在使用Jackson 和Gson Java 库作为候选者来完成这项工作。我只对 JSON 的一小部分属性感兴趣,所以 Gson 很好,因为它的语法非常简洁,但我正在失去继续使用 Gson 的内部战斗,因为 Jackson 已经在我们应用程序的其他地方使用,并且它已经记录更好的性能(我承认这都是失去 Gson 的好理由)。

对于像 POJO 一样

public class TwitterUser {
private String id_str;
private String screen_name;

public String getId_str() {
    return id_str;
}

public void setId_str(String id_str) {
    this.id_str = id_str;
}

public String getScreen_name() {
    return screen_name;
}

public void setScreen_name(String screen_name) {
    this.screen_name = screen_name;
}
}

Gson 的代码只需要一行代码,

TwitterUser user = new Gson().fromJson(jsonStr, TwitterUser.class);

这对我来说很好;可以很好地扩展并且可以选择您想要的属性。另一方面,Jackson 从选定的字段构建 POJO 更加费力。

Map<String,Object> userData = new ObjectMapper().readValue(jsonStr, Map.class);
//then build TwitterUser manually

TwitterUser user = new ObjectMapper().readValue(jsonStr, TwitterUser.class);
//each unused property must be marked as ignorable. Yikes! For 30 odd ignored fields thats too much configuration.

那么在冗长的解释之后,有没有一种方法可以用比上面演示的更少的代码来使用 Jackson?

【问题讨论】:

  • 一个附加说明:你肯定不想每次都创建一个新的 ObjectMapper ——要么使用单例,要么使用 Guice 注入实例。幸运的是,下面也回答了主要问题!
  • @StaxMan 是的,只是为了代码示例的完整性。

标签: java json gson jackson


【解决方案1】:

在 Jackson 1.4+ 中,您可以使用类级别的 @JsonIgnoreProperties 注释以静默方式忽略未知字段,并将 ignoreUnknown 设置为 true。

@JsonIgnoreProperties(ignoreUnknown = true)
public class TwitterUser {
    // snip...
}

【讨论】:

  • 感谢这个马特,工作就像一个魅力。再见 Gson,这很有趣。
  • 一点点 Google 大有帮助 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
相关资源
最近更新 更多