Java 解析动态定义的嵌套映射

Java 解析动态定义的嵌套映射,java,json,jackson,objectmapper,Java,Json,Jackson,Objectmapper,我有一个动态定义的JSON对象 { "lvars": { "task1": { "assigned" : true, "params": {//any key value maps here}, {//any key value maps} }, "task2": { "assign

我有一个动态定义的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<>() {});
Map m=ObjectMapper
.fromJson(getValues(),new TypeReference(){});

在本例中,“lvar”和“mvar”是固定键,而evrything else是变量。如何避免Java中的嵌套映射声明。

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

class NestedMap<K, Object> {
    Map<K, NestedMap<K>> data;
    Object object; // object to resort to if reached the end of "map-chain"
    ...
}
类嵌套映射{
地图数据;
Object Object;//到达“映射链”末尾时要求助的对象
...
}
这使嵌套稍微不那么凌乱。

只需执行以下操作:

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比创建自己的类要好!
    JSONObject obj = new JSONObject(inputAsString);
    JSONObject dynamic0 = obj.getJSONObject("lvars");
    JSONObject dynamic1 = obj.getJSONObject("mvars");