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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将json字符串解析为具有复杂数据结构的java(jackson)相关的知识,希望对你有一定的参考价值。

我试图将下面的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”?

答案

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

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

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

另一答案

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

以上是关于将json字符串解析为具有复杂数据结构的java(jackson)的主要内容,如果未能解决你的问题,请参考以下文章

java怎么使用gson解析json字符串

将 JSON 解析为 Dart 中的列表

将 Json 解析为 Java 对象

如何将flutter中的日期解析为与Java ZonedDateTime兼容的json字符串

JAVA中如何将一个json形式的字符串转为json对象?

java 解析json字符串