gpt4 book ai didi

java - 带有根元素的 Jackson JSON 反序列化

转载 作者:IT老高 更新时间:2023-10-28 12:47:03 27 4
gpt4 key购买 nike

我有一个关于 jackson 的问题,我认为应该很容易解决,但这让我很生气。

假设我有一个看起来像这样的 java POJO 类(假设我的 Getters 和 Setters):

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); 配置映射器(至于 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]

关于java - 带有根元素的 Jackson JSON 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11704255/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com