0

我有一个看起来像这样的 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).

4

0 回答 0