【问题标题】:How to map unwrapped JSON field to wrapped object with Jackson?如何使用 Jackson 将未包装的 JSON 字段映射到包装的对象?
【发布时间】:2021-10-20 08:57:39
【问题描述】:

我有一个 JSON 结构

{
  "name": "...",
  "age": "..."
}

我必须将此 JSON 映射到以下类对象

Class Response {
  Person person;
}

Class Person {
 String name;
 String age;
}

是否有任何 Jackson 注释可以帮助我在不更改 JSON 结构或修改类结构的情况下做到这一点?

【问题讨论】:

    标签: java json jackson jackson-databind jackson-annotations


    【解决方案1】:

    只需在 Response 类中的 Person person; 上添加 @JsonUnrapped 注释即可。顺便说一下,Java 中的类是由 class 而不是 Class 定义的。你的代码不会编译失败吗?如果你还没有完成,你应该将 getter/setter 添加到你的类中

    响应类:

    public class Response {
        @JsonUnwrapped
        Person person;
    
        public Person getPerson() {
            return person;
        }
    
        public void setPerson(Person person) {
            this.person = person;
        }
    }
    

    人物类:

    public class Person {
        String name;
        String age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    }
    

    这里有一个小测试代码来验证它:

        String json="{\n" +
                "  \"name\": \"Joe\",\n" +
                "  \"age\": \"30\"\n" +
                "}";
    
        ObjectMapper mapper = new ObjectMapper();
        
        // convert JSON to Response
        final Response response = mapper.readValue(json, Response.class);
        System.out.println(response.getPerson().getName());
        System.out.println(response.getPerson().getAge());
    
        // convert Response to JSON string
        final String s = mapper.writeValueAsString(response);
        System.out.println(s);
    

    【讨论】:

    • 感谢分享,你确定 JSONUnwrapped 总是适用于反序列化吗?文档没有提到它fasterxml.github.io/jackson-annotations/javadoc/2.8/com/…
    • @AjaySabarish 在我的测试代码中,我展示了序列化/反序列化(json->Response 和 Response->json),您可以自行检查它是否按预期工作。
    【解决方案2】:

    您好,这是一个将 json 绑定到对象的示例 https://www.tutorialspoint.com/jackson/jackson_data_binding.htm

    【讨论】:

    • 感谢分享,但在引用的示例中,JSON 和 Class 结构相似,但如果 JSON 未包装,如何映射?你能把它应用到我的例子中吗?
    猜你喜欢
    • 2021-06-23
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 2017-06-10
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多