jQuery和迭代JSON对象

时间:2011-01-08 04:02:17

标签: jquery json while-loop each

我目前正试图弄清楚如何迭代JSON响应中的所有对象。我的对象可能有无数的子对象,它们也可能有无数的子对象。

{
  "obj1" : {
      "obj1.1" : "test",
      "obj1.2" : {
         "obj1.1.1" : true,
         "obj1.1.2" : "test2",
         "obj1.1.3" : {
             ... // etc
         }
      }
  }
}

我只是想知道是否有一个开箱即用的脚本可以处理这种类型的对象?

5 个答案:

答案 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可能会帮助你很多,它提供了数据管理功能,这可以节省你写一个树木行走者。并进行良好,高效的搜索和排序。

https://github.com/danstocker/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;
         }



 });

};