Java 映射嵌套json字段

Java 映射嵌套json字段,java,json,fasterxml,Java,Json,Fasterxml,我有这样的json: { "name": "John", "address": { "city": "New York" } } 如何使用Jackson将其反序列化为follow dto final class PersonDto { private final String name; // name private final String city; // address.city public PersonDto(String name, String

我有这样的json:

{
  "name": "John",
  "address": {
    "city": "New York"
  }
}
如何使用Jackson将其反序列化为follow dto

final class PersonDto {
  private final String name; // name
  private final String city; // address.city

  public PersonDto(String name, String city) {
  this.name = name;
  this.city = city;
 }
}

本质上我很感兴趣,是否可以只使用构造函数和注释在json中映射嵌套字段“city”,或者我应该编写自定义反序列化程序?谢谢。

您只能使用JSON库来实现这些代码

public class AddressPojo {

private String city;
private long pincode;

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
}

public long getPincode() {
    return pincode;
}

public void setPincode(long pincode) {
    this.pincode = pincode;
}

}
现在是主层

public class MainLayer {

public static void main(String[] args) {
    JSONObject json = new JSONObject();
    AddressPojo addressPojo = new AddressPojo();
    addressPojo.setCity("NYC");
    addressPojo.setPincode(123343);
    json.put("name", "John");
    json.put("address", addressPojo);
    System.out.println(json.get("name")); // To Retrieve name
    JSONObject jsonObj = new JSONObject(json.get("address")); // To retrieve obj                                                                    // address                                                                  // obj
    System.out.println(jsonObj.get("city"));
}

}

就这样。希望能有所帮助:)

我找到的以适当方式解决问题的最佳方法是使用@JsonCreator注释和@JsonProperty。那么代码将如下所示:

final class PersonDto {
  private final String name; // name
  private final String city; // address.city

  public PersonDto(String name, String city) {
    this.name = name;
    this.city = city;
  }

  @JsonCreator
  public PersonDto(@JsonProperty("name") String name, @JsonProperty("address") Map<String, Object> address) {
    this(name, address.get("city"))
  }
}
final class PersonDto{
私有最终字符串名称;//名称
私有最终字符串city;//address.city
public PersonDto(字符串名称,字符串城市){
this.name=名称;
this.city=城市;
}
@JsonCreator
public PersonDto(@JsonProperty(“name”)字符串名称,@JsonProperty(“address”)映射地址){
此(名称、地址、获取(“城市”))
}
}
当然,如果您只反序列化简单的POJO,这是最好的方法。如果反序列化逻辑更复杂,最好实现自己的自定义反序列化器