关于jackson解析复杂json,该怎么解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于jackson解析复杂json,该怎么解析相关的知识,希望对你有一定的参考价值。

参考技术A 定义好ObjectMapper的目标类,你这个也不复杂啊,又不是循环引用
定义了这个类, 用readValue转的时候, 报了一个异常
Unexpected token (START_OBJECT), expected VALUE_STRING: need JSON String that contains type id (for subtype of java.util.List)本回答被提问者和网友采纳

将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的结构是什么,并查看是否以及如何修改您的类。

以上是关于关于jackson解析复杂json,该怎么解析的主要内容,如果未能解决你的问题,请参考以下文章

常用有三种json解析jacksonfastjsongson。

定制 Jackson 解析器来完成对复杂格式 XML 的解析

关于使用jackson.jar解析JSON时,大写JSON key值发生报错的问题

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

@RequestBody jackson解析复杂的传入值的一个坑;jackson解析迭代数组;jackson多重数组;jakson数组

Java Debug 笔记:定制 Jackson 解析器来完成对复杂格式 XML 的解析