遍历json(迭代)

本文介绍了在处理复杂JSON数据时,如何使用迭代来有效地解析和获取特定类型的节点,例如获取所有table类型的节点。通过迭代,可以更方便地处理包含广泛内容的JSON,并存储具有唯一性的键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值