将杰森展平到杰克逊的地图上

时间:2011-10-27 01:54:43

标签: java json deserialization jackson unmarshalling

我目前正在使用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时)。

从那时起,我当然可以自己写一些关于孩子的简单递归,但我希望通过使用库中的工具(注释,配置,自动处理)(以优雅的方式)处理这部分。等),而不必自己写递归。

注意:我们假设不同级别的密钥中没有名称冲突。

1 个答案:

答案 0 :(得分:1)

我知道没有基于注释的机制来执行此操作,因为可能适用的@JsonUnwrapped仅适用于POJO,而不适用于Maps。 我想你可以提交一个增强请求,要求@JsonUnwrapped扩展到也处理Map情况,虽然它似乎只适用于序列化(不确定如何反序列化)。