Jackson vs Gson进行简单的反序列化

时间:2011-09-25 01:19:19

标签: java json gson jackson

为解析像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);

这对我很好;很好地扩展,并选择您想要的属性。另一方面,杰克逊对于从选定的领域建立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而不是上面演示的代码?

1 个答案:

答案 0 :(得分:4)

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

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