如何使用jackson(com.fasterxml.jackson)为同一个键消耗不一致的

在以下JSON结构中,fileMetaData参数具有不同的类型。Jackson抛出一个例外com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.XXX.XXX.XXX.FILENAME out of START_ARRAY token

示例JSON负载:

[
    {
        "fileName": "file_name_1",
        "fileMetaData": {
          "abcd": "valueabcd",
          "xyz": "valuexyz"
        }
    },
    {
        "fileName": "file_name_2",
        "fileMetaData": [
            {
                "123": "value123",
                "456": "value456"
            },
            {
                "123": "value123-1",
                "456": "value456-1"
            }
        ]
    },
    {
        "fileName": "file_name_3",
        "fileMetaData": {
            "key1": {
                "key11": "val11",
                "key12": "val22"
            },
            "key2": "val2"
        }
    },
    {
        "fileName": "abc.xyz",
        "fileMetaData": null
    }]

如何反序列化?


jeck猫
浏览 1736回答 2
2回答

墨色风雨

您可以将数据反序列化为JSONNode。您可以使用isArray()方法检查,然后相应地将其转换为POJO。将JSON数据作为JsonNode读取&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;json&nbsp;=&nbsp;"{&nbsp;\"f1\"&nbsp;:&nbsp;\"v1\"&nbsp;}&nbsp;"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectMapper&nbsp;mapper&nbsp;=&nbsp;new&nbsp;ObjectMapper(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JsonNode&nbsp;jsonNode&nbsp;=&nbsp;mapper.readTree(json);检查使用isArray()的JSONNode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(jsonNode&nbsp;.isArray()){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Do&nbsp;below &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}将节点转换为POJO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;acquire&nbsp;reader&nbsp;for&nbsp;the&nbsp;right&nbsp;type &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectReader&nbsp;reader&nbsp;=&nbsp;mapper.readerFor(new&nbsp;TypeReference<List<String>>()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;use&nbsp;it &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List<String>&nbsp;list&nbsp;=&nbsp;reader.readValue(arrayNode);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java