JQuery и итерации на объектах JSON - PullRequest
5 голосов
/ 08 января 2011

В настоящее время я пытаюсь выяснить, как я могу перебрать все объекты в ответе JSON.У моего объекта могут быть бесконечные подобъекты, и они также могут иметь бесконечные подобъекты.

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

Мне просто интересно, есть ли готовый сценарий, который может обрабатывать такие объекты?

Ответы [ 5 ]

4 голосов
/ 08 января 2011

Вот небольшая функция, которая отслеживает глубину вашей прогулки по дереву, с остановками на этом пути, чтобы позволить вам выполнить действие (вы не указали, что вы на самом деле хотите делать или когда):

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.
2 голосов
/ 08 января 2011

То, что вы представили в своем вопросе, это не JSON, это литерал объекта JavaScript.Разница в том, что один - это строка, а другой - фактический литеральный объект, который можно использовать в JavaScript без дальнейшего преобразования.

Для обхода литерала объекта JS используйте простой рекурсивный цикл 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' } });
1 голос
/ 08 января 2011

После того, как вы проанализировали JSON в объекте, вам нужно реализовать обходчик деревьев (рекурсивную функцию), чтобы найти конкретные значения, которые вас интересуют.

Тем не менее, JOrder, вероятно, очень вам поможет, он предоставляет средства управления данными, это избавляет вас от написания обходчика дерева. и делает хороший, эффективный поиск и сортировку.

https://github.com/danstocker/jorder

0 голосов
/ 20 июня 2014

Я использую этот фрагмент кода, чтобы пройтись по Де-Джону. В основном, когда узел является объектом, я вызываю ту же функцию рекурсивно. Надеюсь, вы найдете это полезным.

Для этого требуется, как вы можете видеть, 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;
         }



 });

};

0 голосов
/ 08 января 2011

В библиотеке 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 () принимает строку JSON (что вы получите из запроса JSON) и возвращаетобъект JavaScript.Оттуда вы можете получить доступ к данным, как обычно с любым объектом JavaScript.

...