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

问题描述 投票:0回答:2

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

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

我有这个类结构,但是我得到ipAndPorts map为空。

    @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类应该如何正确表示“prop2”?

java json jackson jackson-databind
2个回答
0
投票

记录:问题通过使用解决了

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

直接没有Prop2类。否则Jackson会在ipAndPorts JSON对象下期望一个名为prop2的JSON属性。


0
投票

我想说你首先要按照它想要的方式创建你的Java类,然后使用Jackson将它序列化为JSON。您将看到结果JSON的结构是什么,并查看是否以及如何修改您的类。

© www.soinside.com 2019 - 2024. All rights reserved.