Java遍历JSON

遍历json是经常遇到的问题,之前看到网上很多方案都一开始默认json是一个map,或者说认为最外层一定是一个map;

并没有考虑到map与array混合嵌套的情况;

例如:[{"a":"a"},[{"b":"b"},["c",1,2,3]]]

展开后是:

[
    {
        "a":"a"
    }
,
    [
        {
            "b":"b"
        }
,
        [
            "c",
            1,
            2,
            3
        ]

    ]

]

这也是一个合法的json;


所以给出一个修正后的遍历json的方法,供大家参考:

    /**
     * traverseJson
     * 遍历的最简单直接的方式就是用递归,
     * json是一个map与array的混合体:
     * map中可以有map也可以有array;
     * array中可以有array也可以有map;
     * 所以递归之前,对于某一个节点,你不能断定他是JSONObject还是JSONArray
     * @param json
     * @return
     */
    private Object traverseJson(Object json) {
    	// check null
    	if (json == null) {
    		return null;
    	}
    	
    	try {
    		
	    	if (json instanceof JSONObject) {// if json is a Map
	    		
	    		JSONObject retObj = new JSONObject();
	    		JSONObject jsonObj = (JSONObject)json;
	    		Iterator it = jsonObj.keys();
	    		while (it.hasNext()) {
	        		String key = (String)it.next();
	        		Object value = jsonObj.get(key);
	        		// TODO: do something here
	        		retObj.put(key, traverseJson(value));
	    		}
	    		return retObj;
	    		
	    	} else if (json instanceof JSONArray) {// if json is an Array
	    		
	    		JSONArray retArr = new JSONArray();
	    		JSONArray jsonArr = (JSONArray)json;
	    		int len = jsonArr.length();
	    		for (int i = 0; i < len; ++i) {
	    			// TODO: do something here
	    			retArr.put(traverseJson(jsonArr.get(i)));
	    		}
	    		return retArr;
	    		
	    	} else {// if json is just a raw element
	    		
	    		// TODO: do something here
	    		return json;
	    		
	    	}
	    	
    	} catch (Exception e) {
    		// deal Exception or throw it
    	}
    	
    	return null;
    }

欢迎指正!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值