杰克逊序列化具有相同名称的嵌套属性
Jackson serialize nested attribute with same name
目前,我有一个 JSON 以下类型的响应。
{
"user":{
"user":{
"name":"Demo",
"age":25,
"eail":"demo@abc.com"
},
"address":{
"country":"NZ"
}
}
}
我想将我的自定义 class 映射到嵌套的用户属性。
@Data
public class Demo{
@JsonProperty("user")
private User user;
private Address address;
}
但是当我试图获取属性时,它总是发送 null
值。我认为它映射到第 2 行 "user"
的第一次出现。
如何将其映射到第 3 行中的更正 user
属性。
映射从 JSON 的根开始,因此此 JSON 的正确 class 定义将是此
public class Demo {
@JsonProperty("user")
private DemoUser user;
}
public class DemoUser {
@JsonProperty("user")
private User user;
@JsonProperty("address")
private Address address;
}
如果你想保持 class 不变,只想使用内部的 'user',你可以像这样使用 JsonNode
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readValue(jsonString, JsonNode.class);
Demo demo = mapper.readValue(node.at("/user").toString(), Demo.class);
at() 方法接受 JSON 路径表达式,它是 JSON 中特定节点的路径。
这里,"/user"
表示它将从JSON的根节点找到节点user
,并将return它。
同样,
node.at("/user/user").toString();
会给你
{
"name":"Demo",
"age":25,
"eail":"demo@abc.com"
}
目前,我有一个 JSON 以下类型的响应。
{
"user":{
"user":{
"name":"Demo",
"age":25,
"eail":"demo@abc.com"
},
"address":{
"country":"NZ"
}
}
}
我想将我的自定义 class 映射到嵌套的用户属性。
@Data
public class Demo{
@JsonProperty("user")
private User user;
private Address address;
}
但是当我试图获取属性时,它总是发送 null
值。我认为它映射到第 2 行 "user"
的第一次出现。
如何将其映射到第 3 行中的更正 user
属性。
映射从 JSON 的根开始,因此此 JSON 的正确 class 定义将是此
public class Demo {
@JsonProperty("user")
private DemoUser user;
}
public class DemoUser {
@JsonProperty("user")
private User user;
@JsonProperty("address")
private Address address;
}
如果你想保持 class 不变,只想使用内部的 'user',你可以像这样使用 JsonNode
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readValue(jsonString, JsonNode.class);
Demo demo = mapper.readValue(node.at("/user").toString(), Demo.class);
at() 方法接受 JSON 路径表达式,它是 JSON 中特定节点的路径。
这里,"/user"
表示它将从JSON的根节点找到节点user
,并将return它。
同样,
node.at("/user/user").toString();
会给你
{
"name":"Demo",
"age":25,
"eail":"demo@abc.com"
}