使用复杂的数据结构将 json 字符串解析为 java (jackson)

Parsing json string to java with complex datastructure(jackson)

我试图将下面的 json 字符串转换为 java 对象,但我得到的是空对象。 prop2对象下,可以有任意数量的键值对(key为字符串,value为数组)

{
"Level1": {
        "prop1": "",
        "prop2": {
            "one": [{
                "ip": "1.2.3.4",
                "port": "100"
            }],
            "ten": [{
                "ip": "10.20.20.10",
                "port": "200"
            }]
        }
}
}

我有这个 class 结构,但是我得到的 ipAndPorts 映射为空。

    @JsonIgnoreProperties(ignoreUnknown = true)
    static class Root {
        @JsonProperty("Level1")
        private Level1 level1;
    }
    @JsonIgnoreProperties(ignoreUnknown = true)
    static class Level1 {
        @JsonProperty("prop2")
        private Prop2 prop2;
    }

    @JsonIgnoreProperties(ignoreUnknown = true)
    static class Prop2 {
        private Map<String, List<IpAndPort>> ipAndPorts = Collections.emptyMap();
    }
    @JsonIgnoreProperties(ignoreUnknown = true)
     static class IpAndPort {
        @JsonProperty("port")
        private String port;
    }

我的 java class 应该是什么样子才能正确表示 "prop2"?

备案:问题已通过使用

解决
@JsonIgnoreProperties(ignoreUnknown = true)
static class Level1 {
    @JsonProperty("prop2")
    private Map<String, List<IpAndPort>> ipAndPorts = Collections.emptyMap();
}

直接不用Prop2class。否则杰克逊会期望 JSON 属性 在 prop2 JSON 对象下调用 ipAndPorts

我建议您首先按照希望的方式创建 Java class,然后使用 Jackson 将其序列化为 JSON。您将看到结果 JSON 的结构是什么,并查看您是否以及如何需要修改您的 class.