映射嵌套 json 字段
Map nested json field
我有 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"))
}
}
当然,如果你只反序列化简单的 POJO,这是最好的方法。如果你的反序列化逻辑比较复杂,最好实现你自己的自定义反序列化器。
我有 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"))
}
}
当然,如果你只反序列化简单的 POJO,这是最好的方法。如果你的反序列化逻辑比较复杂,最好实现你自己的自定义反序列化器。