我有一个看起来像这样的 json:
{
"Data" : {
"abc" : {
"1" : "foo",
"2" : "bar"
},
"def" : {
"1" : "foo",
"2" : "baz"
}
},
"Status" : {
"Code" : 0,
"Text" : "Success"
}
}
我真正关心的是“数据”中的内容。我正在尝试将jackson.databind.ObjectMapper
其映射到我的自定义类,其中“abc”是名称,“1”的值是property1,“2”的值是property2。
public class MyClass {
String name;
String property1;
String property2;
@JsonProperty("1")
public void setProp1(String prop1) {
this.property1 = prop1;
}
@JsonProperty("2")
public void setProp2(String prop2) {
this.property2 = prop2;
}
@JsonProperty(?????)
public void setName(String name) {
this.name = name;
}
}
我想以与设置其他属性相同的方式设置名称,使用 JsonProperty 注释,但名称始终不同,并且没有与其他属性相同的字段 id。我怎样才能做到这一点?这是我到目前为止所拥有的:
public static void main(String[] args) {
String json = "{\"Data\" : {\"abc\" : {\"1\" : \"foo\",\"2\" : \"bar\"},\"xyz\" : {\"1\" : \"foo\",\"2\" : \"baz\"}},\"Status\" : {\"Code\" : 0,\"Text\" : \"Success\"}}";
ObjectMapper mapper = new ObjectMapper();
JsonNode dataNode = mapper.readTree(json);
JsonNode innerJson = dataNode.findPath("Data");
JsonNode abcNode = innerJson.findPath("abc");
MyClass myClass = mapper.readValue(abcNode.toString(), MyClass.class);
System.out.println(myClass);
}
产生:
>>MyClass[name=, prop1=foo, prop2=bar] // 重写 toString()
如果您可以解释如何获取密钥(名称)而不将它们硬编码到findPath(String)
.