我和Jackson有一个问题,我认为应该很容易解决,但是这真使我丧命。
假设我有一个看起来像这样的Java POJO类(假设对我来说是Getters和Setters):
class User {
private String name;
private Integer age;
}
我想将看起来像这样的JSON反序列化为User对象:
{
"user":
{
"name":"Sam Smith",
"age":1
}
}
杰克逊给了我一些问题,因为用户不是JSON中的第一级对象。我显然可以制作一个具有单个User对象的UserWrapper类,然后使用该对象反序列化,但是我知道必须有一个更优雅的解决方案。
我应该怎么做?
编辑:此解决方案仅适用于杰克逊 <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 POJO类,看起来像这样(假设我有getter和setter): 我想反序列化看起来像这样的JSON到一个User对象: Jackson给了我一些问题,因为User不是JSON中的第一级对象。我显然可以创建一个UserWrapper类,它有一个用户对象,然后使用它反序列化,但我知道一定有一个更优雅的解决方案
问题内容: 我应该如何反序列化以下JSON以跳过根元素并仅解析此JSON的内部。我想避免创建其他仅包含字段的3rd类。 因此,我只希望有以下两个类: 问题答案: 您可以为此使用库。 下面的代码将解决您的问题。
问题内容: 这是我的课程: 这是序列化的JSON: 这是反序列化器代码: 这是例外: 还有一个关于序列化JSON的问题:是否有一种方法可以使JSON序列化程序发布“ @type”而不是“ type”。当前,它看起来像具有属性“类型”的对象。如果我们可以用“ @”修饰它,那么显然这更多的是类型信息而不是属性。 谢谢,Behzad 问题答案: 以下是我对您的两个问题的回答: 问题#1-例外 当使用该属
我正在编写一个RESTeasy代理客户端,以使用Apple的API来检索其iTunes类别列表。当您查询有关给定类别的信息时,例如使用此 URL: …您得到的JSON响应如下: 我试图使用JAXB和Jackson将这个JSON响应映射到一个Java对象。然而,“1420”根元素名称似乎引起了一个问题,因为我在调用我的客户端时得到了以下异常: 我的JAXB类如下所示: 我甚至尝试过创建一个包装类,因
我正在使用JAXB来解封xml文件。这是我的元素特性代码,但是我想在元素特性中有一个特殊的元素顺序,像这样 我检查了一些@XmlType教程(propOrder = {}),但我找不到一种方法来订购元素列表,如这里的属性元素。 这是我的代码。 它总是抛出异常,因为我在propOrder中只定义了一个属性。但是由于属性是多重的,可能是一个或多个,我不知道如何实现它。或者你知道其他排序元素的方法吗 提
问题内容: 我有一个包含许多元素的XML文档,每个元素都有一个或属性。看到这个例子: 我需要一种方法告诉Simple将元素反序列化为a 和将元素反序列化为a 。 我怎样才能做到这一点? 如果您想使用它,这是我目前拥有的代码: 问题答案: 现在真正的问题… 我的回答: 没有!或至少,没关系! 像这里这样的属性只是字符串,不能做出任何决定。但是还有另一种好方法: 实施要为其做出决定的转换器 使用a 做