【问题标题】:Mapping dynamic JSON object with unlimited nested structure to Map using JsonAnySetter annotation使用 JsonAnySetter 注解将具有无限嵌套结构的动态 JSON 对象映射到 Map
【发布时间】:2020-09-23 14:40:42
【问题描述】:

我想用自定义结构将JSON Object 映射到Java 类。 例如:

public class RestAttributesMappingDTO {
    Map<String, Object> details = new LinkedHashMap<>();
    @JsonAnySetter
    void setDetail(String key, Object value) {
        details.put(key, value);
    }
}

如您所见,注解@JsonAnySetter已用于映射。

任何平面结构都可以。

但是如果我想映射具有无限(自定义)嵌套结构的对象?

例如:

{
    name: "",
    age: "",
    job: [{
         job1: {  
              title: "",
              ZIP: ""                   
         }
    }]
}

产生没有@JsonAnySetter的创建地图的递归算法。

但是有没有办法用Jackson 构建这个无限嵌套的地图?

【问题讨论】:

    标签: java json jackson deserialization json-deserialization


    【解决方案1】:

    Jackson 默认反序列化:

    • JSON ObjectMap,其中键是 String-s。
    • JSON ArrayList 的对象或基元。

    在您的示例中,您可以保持原样,但需要在运行时进行类型转换和检查。其他选项是使用com.fasterxml.jackson.databind.JsonNode 类和方法可能如下所示:

    void setDetail(String key, JsonNode value)
    

    但是你甚至可以跳过这个方法和@JsonAnySetter注解,直接在类中使用:

    public class RestAttributesMappingDTO {
        private JsonNode details;
        //getters, setters
    }
    

    JsonNode 允许迭代 key-value 对。

    查看其他一些相关问题:

    【讨论】:

      猜你喜欢
      • 2019-07-26
      • 2023-01-11
      • 2021-07-06
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多