Java 解析动态定义的嵌套映射
我有一个动态定义的JSON对象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
{
"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");