Карта вложенного поля JSON - PullRequest
0 голосов
/ 01 марта 2019

У меня есть json, как это:

{
  "name": "John",
  "address": {
    "city": "New York"
  }
}

Как я могу десериализовать его с помощью Джексона?поле 'city' в json, используя только конструктор и аннотации, или я должен написать собственный десериализатор?Спасибо.

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Лучший способ, который я нашел, чтобы решить мою проблему надлежащим образом, это использовать аннотацию @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"))
  }
}

Конечно, это лучший способ, если десериализовать просто простой POJO.Если у вас логика десериализации более сложная, лучше реализовать собственный настраиваемый десериализатор.

0 голосов
/ 01 марта 2019

Вы можете использовать только библиотеку 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"));
}

}

Вот и все.Надеюсь, это поможет:)

...