我目前正试图弄清楚如何迭代JSON响应中的所有对象。我的对象可能有无数的子对象,它们也可能有无数的子对象。
{
"obj1" : {
"obj1.1" : "test",
"obj1.2" : {
"obj1.1.1" : true,
"obj1.1.2" : "test2",
"obj1.1.3" : {
... // etc
}
}
}
}
我只是想知道是否有一个开箱即用的脚本可以处理这种类型的对象?
答案 0 :(得分:4)
这是一个跟踪你穿过树的深度的小功能,沿着路径停下来让你做一个动作(你没有指定你真正想做什么,或者什么时候):
function dig( blob, depth ) {
var depth = depth || 0; // start at level zero
for( var item in blob ) {
console.log( 'depth: ' + depth + ': ' + item); // do something real here
if( typeof blob[item] === 'object' ) {
dig( blob[item], ++depth ); // descend
} else { // simple value, leaf
console.log( ' => ' + blob[item] ); // do something real here
}
}
}
console.log( dig( obj ) );
假设obj
是您的JSON,如上所述,这应该给你一些(未经测试):
depth: 0: obj1
depth: 1: obj1.1
=> test
depth: 1: obj1.2
// etc.
答案 1 :(得分:2)
您在问题中表达的不是JSON,而是JavaScript Object Literal。区别在于一个字符串,一个是实际的文字对象,可以在JavaScript中使用而无需进一步转换。
要使用JS Object Literal,请使用简单的递归for循环。您不需要单独的库。
var walk = function(o){
for(var prop in o){
if(o.hasOwnProperty(prop)){
var val = o[prop];
console.log('Value = ',val, ', Prop =', prop, ', Owner=',o);
if(typeof val == 'object'){
walk(val);
}
}
}
};
walk({ 'foo':'bar', biz: { x: 'y' } });
答案 2 :(得分:1)
将JSON解析为Object后,您需要实现一个树形漫游器(递归函数)来查找您感兴趣的特定值。
然而,JOrder可能会帮助你很多,它提供了数据管理功能,这可以节省你写一个树木行走者。并进行良好,高效的搜索和排序。
答案 3 :(得分:0)
jQuery JavaScirpt库只有以下方法:
var jsonObject = $.parseJSON('{
"obj1" : {
"obj1.1" : "test",
"obj1.2" : {
"obj1.1.1" : true,
"obj1.1.2" : "test2",
"obj1.1.3" : {
... // etc
}
}
}
}');
alert(jsonObject['obj1']);
parseJSON() method接受JSON字符串(这是您从JSON请求获得的字符串)并返回一个JavaScript对象。从那里,您可以像访问任何JavaScript对象一样访问数据。
答案 4 :(得分:0)
我正在使用此代码段来浏览de json。基本上当节点是一个对象时,我会递归调用相同的函数。希望你觉得它很有用。
正如你所看到的,它需要jQuery。它也可以在不使用相同想法的情况下完成。
function recorrer(json)
{
$.each(json, function(index, value) {
switch ($.type(value)){
case 'string':
console.log(value) //for example
break;
case 'object':
recorrer(value); // recursiva
break;
}
});
};