json做数据交互很方便,平时写起来有些类似map,这次解析一个包含内容较广的json时发现原来的方法不适用,单纯用for循环没有解决,在网上找资料实践了下发现还是迭代合适,比如需要解析的如下json获取table类型的node
{"title":"newFlow_1",
"nodes":{
"demo_node_1":{"name":"SQL条件选择","left":86,"top":66,"type":"sqlcondition","width":60,"height":20,"alt":true},
"demo_node_2":{"name":"排序","left":464,"top":72,"type":"sort","width":60,"height":20,"alt":true},
"demo_node_5":{"name":"Table","left":690,"top":139,"type":"table","width":60,"height":20,"alt":true},
"demo_node_8":{"name":"Table","left":230,"top":240,"type":"table","width":60,"height":20,"alt":true},"demo_node_11":{"name":"排序","left":467,"top":164,"type":"sort","width":60,"height":20,"alt":true},"demo_node_13":{"name":"Table","left":661,"top":247,"type":"table","width":60,"height":20,"alt":true}},
"lines":{
"demo_line_3":{"type":"sl","from":"demo_node_1","to":"demo_node_2","name":""},
"demo_line_6":{"type":"sl","from":"demo_node_2","to":"demo_node_5","name":""},
"demo_line_9":{"type":"sl","from":"demo_node_1","to":"demo_node_8","name":""},
"demo_line_12":{"type":"sl","from":"demo_node_1","to":"demo_node_11","name":""},
"demo_line_14":{"type":"sl","from":"demo_node_11","to":"demo_node_13","name":""}},
"areas":{},"initNum":17}
先解析出table类型的node
JSONObject dataJson = new JSONObject().fromObject(jsonStr);
JSONObject nodes = dataJson.getJSONObject("nodes");
然后迭代匹配table类型节点,将区分唯一性的key存储起来
List<String> nodeNameJsonList = new ArrayList<String>();
Iterator it = nodes.keys();
while(it.hasNext()){
String key = (String) it.next();// "demo_node_1"
JSONObject node = nodes.getJSONObject(key);
String nodeStr = node.toString();
if(nodeStr!=null){
nodeType = node.getString("type");
if("table".equals(nodeType)){
nodeNameJsonList.add(key);
}
}
}
最后结果为:
[demo_node_5, demo_node_8, demo_node_13]