Jackson 与 Gson 的简单反序列化

mar*_*ers 1 java json jackson gson

为了像这个 twitter APIusers/show响应那样解析 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;
}
}
Run Code Online (Sandbox Code Playgroud)

构建它所需的 Gson 唯一代码是一行,

TwitterUser user = new Gson().fromJson(jsonStr, TwitterUser.class);
Run Code Online (Sandbox Code Playgroud)

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

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

或者

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.
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*all 5

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

@JsonIgnoreProperties(ignoreUnknown = true)
public class TwitterUser {
    // snip...
}
Run Code Online (Sandbox Code Playgroud)

  • &lt;拍打额头&gt; 感谢这个马特,工作得像个魅力。再见 Gson,它持续的时候很有趣。 (2认同)