碰到这样的一个问题:在一个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;
}