为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

jeck猫 2019-04-26 18:15:42
在以下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     }]如何反序列化?
查看完整描述

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

您可以将数据反序列化为JSONNode。您可以使用isArray()方法检查,然后相应地将其转换为POJO。

  1. 将JSON数据作为JsonNode读取

        String json = "{ \"f1\" : \"v1\" } ";

        ObjectMapper mapper = new ObjectMapper();
        JsonNode jsonNode = mapper.readTree(json);
  1. 检查使用isArray()的JSONNode

        if(jsonNode .isArray()){
            //Do below
        }
  1. 将节点转换为POJO

        // acquire reader for the right type
        ObjectReader reader = mapper.readerFor(new TypeReference<List<String>>() {
        });
        // use it
        List<String> list = reader.readValue(arrayNode);


查看完整回答
反对 回复 2019-05-15
  • 2 回答
  • 0 关注
  • 1735 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号