我目前正在使用Jackson库,使用注释将json解组为pojos。
我想要解组的json树如下:
{
"key1":"value1",
"key2":"value2",
"key3":{
"key31":{
"key311":"value311",
"key312":"value312",
"key313":"value313"
},
"key32":"value32"
},
"key4":"value4",
"key5":"value5",
"key6":{
"key61":"value61"
}
}
我事先并不知道json结构,并希望将其完全展平为Map,其内容相当于:
Map<String, Object> outputMap = new HashMap<String, Object>();
outputMap.put("key1", "value1");
outputMap.put("key2", "value2");
outputMap.put("key311", "value311");
outputMap.put("key312", "value312");
outputMap.put("key313", "value313");
outputMap.put("key32", "value32");
outputMap.put("key4", "value4");
outputMap.put("key5", "value5");
outputMap.put("key61", "value61");
(注意应忽略键“key3”,“key31”和“key6”)
使用注释@JsonAnySetter
,我可以创建一个函数来用所有顶级原子填充地图,但该方法也会捕获具有子节点的节点(当值为Map时)。
从那时起,我当然可以自己写一些关于孩子的简单递归,但我希望通过使用库中的工具(注释,配置,自动处理)(以优雅的方式)处理这部分。等),而不必自己写递归。
注意:我们假设不同级别的密钥中没有名称冲突。
答案 0 :(得分:1)
我知道没有基于注释的机制来执行此操作,因为可能适用的@JsonUnwrapped仅适用于POJO,而不适用于Maps。 我想你可以提交一个增强请求,要求@JsonUnwrapped扩展到也处理Map情况,虽然它似乎只适用于序列化(不确定如何反序列化)。