json对象在java和javascript中的遍历

碰到这样的一个问题:在一个json对象中,例如jsonStr这个字符串,当我不知道people这个key值(或者people是一个不定的key)的时候,如何获取name属相的value?

var jsonStr='{"wp":"123","people":{"name":"test","age":20,"sex":"boy"},"animal":"pigs"}';

上代码
js中获取:

var json=JSON.parse(jsonStr);
console.log(jsonTraversal(json,"name"));
 function jsonTraversal(json,WhatKey){
                    for(var p in json){
                        if(json[p] instanceof Object){
                            return jsonTraversal(json[p],WhatKey)
                        }else{
                            if(p==WhatKey){
                                return json[p];
                            }
                        }
                    }
                }

java中获取:
针对低版本的

JSONObject obj=JSONObject.fromObject(jsonStr);
System.out.println(decodeJSONObject2(obj,whatkey));

//针对低版本的json-lib
public static Object decodeJSONObject2(JSONObject json,String whatkey){  
        Iterator<String> keys=json.keys();  
        JSONObject jo=null;  
        Object o = null;  
        String key;  
        while(keys.hasNext()){
            key=keys.next();  
            o=json.get(key);  
            if(o instanceof JSONObject){  
                jo=(JSONObject)o;  
                if(jo.keys().hasNext()){
                return decodeJSONObject2(jo,whatkey);  
                }
            }else{ 
            if(key.equals(whatkey)){
            break;
            }
            } 
        }
return o;  
    }  
     //针对高版本的json-lib
     public static Object decodeJSONObject(JSONObject json,String WhatKey){
        Iterator<String> keys=json.keys();  
        JSONObject jo=null;  
        Object o = null;  
        String key;  
        while(keys.hasNext()){  
            key=keys.next();  
            o=json.get(key);  
            if(o instanceof JSONObject){  
                jo=(JSONObject)o;  
                if(jo.keySet().size()>0){  
                    return decodeJSONObject(jo,WhatKey);  
                }
            }else{  
            if(key.equals(WhatKey)){
            break;
            }
            }  
        }  
        return o;
    } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值