簡體   English   中英

Jackson JSON 反序列化與根元素

[英]Jackson JSON Deserialization with Root Element

我對傑克遜有一個我認為應該很容易解決的問題,但它讓我很沮喪。

假設我有一個看起來像這樣的 Java POJO 類(假設我有 Getter 和 Setter):

class User {
    private String name;
    private Integer age;
}

我想將如下所示的 JSON 反序列化為 User 對象:

{
  "user":
    {
      "name":"Sam Smith",
      "age":1
  }
}

Jackson 給我帶來了問題,因為 User 不是 JSON 中的第一級對象。 我顯然可以創建一個具有單個 User 對象的 UserWrapper 類,然后使用它進行反序列化,但我知道必須有一個更優雅的解決方案。

我該怎么做?

編輯:此解決方案僅適用於 jackson < 2.0

對於您的情況,有一個簡單的解決方案:

  • 您需要使用@JsonRootName(value = "user")注釋模型類;
  • 您需要使用om.configure(Feature.UNWRAP_ROOT_VALUE, true);配置映射器om.configure(Feature.UNWRAP_ROOT_VALUE, true); (對於 1.9)和om.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); (對於版本 2)。

就是這樣!


@JsonRootName(value = "user")
public static class User {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(final String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(final Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }

}

ObjectMapper om = new ObjectMapper();
om.configure(Feature.UNWRAP_ROOT_VALUE, true);
System.out.println(om.readValue("{  \"user\":    {      \"name\":\"Sam Smith\",      \"age\":1  }}", User.class));

這將打印:

User [name=Sam Smith, age=1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM