首页 > 解决方案 > 如何将平面 JSON 转换为分层 java 类?

问题描述

我需要将平面 JSON 对象反序列化为 Java 对象,并将一些属性设置为子对象。

{
 "name": "abcd",
 "addressLine1": "123",
 "addressLine2": "1111"
}

Class Student {
  String name;
  Address address;
}

Class Address {
 String line1;
 String line2;
}

如何使用 Jackson 将我的 JSON 反序列化为Student对象?我无法映射addressLine1 to Student.Address.line1addressLine2 to Student.Address.line2

标签: javajsonjacksonjackson-databind

解决方案


你可以这样定义你的数据类:

  public static class Student {
    String name;

    @JsonUnwrapped
    Address address;
  }

  public static class Address {
    @JsonProperty("addressLine1")
    String line1;
    @JsonProperty("addressLine2")
    String line2;
  }

然后您可以Objectmapper以通常的方式使用 - 无需任何额外的魔法或解决方法:

Student student = mapper.readValue(json, Student.class);

如果您传入的 json 字符串确实是您提供的格式(不带引号),那么还要添加:

mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);

推荐阅读