【问题标题】:Flattening of json to a map with Jackson使用杰克逊将 json 展平为地图
【发布时间】:2011-10-27 01:54:43
【问题描述】:

我目前正在使用 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,我可以创建一个函数来使用所有顶级原子填充映射,但该方法还将捕获具有子节点的节点(当值为映射时)。

从那时起,我当然可以自己编写对子级的简单递归,但我希望通过使用库中的工具(注释、配置、等),而不必自己编写递归。

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

【问题讨论】:

    标签: java json deserialization jackson unmarshalling


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多