如何使用 Jackson 解包 JSON 中的特定字段?

Mri*_*lla 3 java json jackson

我有一个 JSON 有效负载,如下所示:

{
    "id": 32,
    "name": "[Sample] Tomorrow is today, Red printed scarf",
    "primary_image": {
      "id": 247,
      "zoom_url": "www.site.com/in_123__14581.1393831046.1280.1280.jpg",
      "thumbnail_url": "www.site.com/in_123__14581.1393831046.220.290.jpg",
      "standard_url": "www.site.com/in_123__14581.1393831046.386.513.jpg",
      "tiny_url": "www.site.com/in_123__14581.1393831046.44.58.jpg"
    }
  }
Run Code Online (Sandbox Code Playgroud)

我可以解开特定字段并丢弃所有其他字段吗?换句话说,我可以将其直接绑定到 POJO,如下所示:

public class Product {

    private Integer id;
    private String name;
    private String standardUrl;
}
Run Code Online (Sandbox Code Playgroud)

ara*_*nid 5

有很多方法。您需要反序列化、序列化还是两者都需要?

反序列化的一种方法是使用将图像作为树节点的创建者方法:

public static class Product {
    private Integer id;
    private String name;
    private String standardUrl;

    public Product(@JsonProperty("id") Integer id,
                   @JsonProperty("name") String name,
                   @JsonProperty("primary_image") JsonNode primaryImage) {
        this.id = id;
        this.name = name;
        this.standardUrl = primaryImage.path("standard_url").asText();
    }
}
Run Code Online (Sandbox Code Playgroud)

创建者不必是构造函数,您可以有一个仅用于 Jackson 反序列化的静态方法。

不过,您必须定义一个自定义序列化器来重新序列化它(例如,一个 StdDelegatingSerializer 和一个转换器,用于将字符串包装回 ObjectNode)