【问题标题】:Parsing a dynamically defined nested map解析动态定义的嵌套地图
【发布时间】:2021-05-11 16:36:45
【问题描述】:

我有一个动态定义的 JSON 对象。

{
   "lvars": {
      "task1": {
          "assigned" : true,
          "params": {//any key value maps here}, {//any key value maps}
        },
      "task2": {
          "assigned" : false,
          "params": {//any key value maps here}, {//any key value maps}
      ....
   },
   "mvars": {
          "Id": {
            "type": "String",
            "value": ""
        },
   }
}

现在在 java 中,当我将其反序列化为代码时,它变得有点像这样,

Map<String, Map<String, Map<String, Map<String, Map<String, Object>>>>> m = ObjectMapper
            .fromJson(getValues(), new TypeReference<>() {});

在这种情况下,“lvars”和“mvars”是固定键,而其他任何东西都是可变的。如何避免 Java 中映射声明的嵌套映射。

【问题讨论】:

    标签: java json jackson objectmapper


    【解决方案1】:

    只要做:

    Map<String,Object> data = ObjectMapper.fromJson(getValues(), new TypeReference<>() {});
    
        Map<String, Map<String, Map<String,Object>>> dynamic_map_0 = (Map<String, Map<String, Map<String, Object>>>) data.get("lvars");
        Map<String, Map<String, Map<String,Object>>> dynamic_map_1 = (Map<String, Map<String, Map<String, Object>>>) data.get("mvars");
    

    或更简单:

        JSONObject obj = new JSONObject(inputAsString);
        JSONObject dynamic0 = obj.getJSONObject("lvars");
        JSONObject dynamic1 = obj.getJSONObject("mvars");
    

    【讨论】:

    • 啊,是的,JSONObject 比创建自己的类更好!
    【解决方案2】:

    您可以创建一个名为 NestedMap 的类,它是一个包含对其他 NestedMap 对象的引用的数据结构,如下所示:

    class NestedMap<K, Object> {
        Map<K, NestedMap<K>> data;
        Object object; // object to resort to if reached the end of "map-chain"
        ...
    }
    

    这使得嵌套不那么混乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2019-01-23
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多