jQuery和迭代JSON对象
我目前正在试图弄清楚如何遍历JSON响应中的所有对象。我的对象可能有无尽的子对象,他们也可能有无尽的子对象。jQuery和迭代JSON对象
{
"obj1" : {
"obj1.1" : "test",
"obj1.2" : {
"obj1.1.1" : true,
"obj1.1.2" : "test2",
"obj1.1.3" : {
... // etc
}
}
}
}
我只是想知道是否有一个开箱即用的脚本可以处理这种类型的对象?
这里有一个小功能,跟踪你走路的深度通过树,沿途停靠,让你做执行操作(没有指定你真正想要做什么,或当):
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.
一旦你解析的JSON成一个对象,你需要实现一个树沃克(递归函数)来找到你感兴趣的特定值。
然而,JOrder可能会帮助你它提供了大量的数据管理功能,这可以帮助您编写一个树型漫游器。并做一个好的,高性能的搜索和排序。
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对象一样访问数据。
哦,我认为魔鬼知道如何让JSON成为一个对象。 – ocodo 2011-01-08 04:10:26
你在问题中代表的不是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' } });
我使用此代码段穿行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;
}
});
};
+1为名称和有趣的问题。我认为我不一定会使用你正在使用的数据结构类型,看起来它可能在两端都是昂贵的。这可能是更好的解决方案,不需要走树。也许你可以详细说明你想用数据做什么(当你找到有趣的位)。 – Gabriel 2011-01-08 04:26:59
通常最好知道响应的一般格式。 JSON的强大之处在于能够通过键获取对象。如果您现在知道键或值是什么,也不知道格式是什么,那么JSON可能不适合您。 – Alex 2011-01-08 05:02:48
请勿在您的帖子中使用[签名或标语](http://stackoverflow.com/faq#signatures)。 – meagar 2011-01-21 22:41:06