2014-09-02 4 views
0

Я пытаюсь зациклировать объект JSON в NODEJS.Невозможно выполнить цикл через json-объект в nodejs

Я пытаюсь получить значение, например, var value = [table] [row] [0] [STATE] или [table] [row] [1] [STATE] или [table] [row] [ 2] [STATE], но я получаю STATE неопределенную ошибку? Является ли это правильным способом петли через объект Json?

data = JSON.parse(buffer); 


    for (var obj in data) { 
     if (data.hasOwnProperty(obj)) { 
     console.log(obj); 

     if (obj == "table") { 
      for (var prop in data[obj]) { 
      if (data[obj].hasOwnProperty(prop)) { 

        console.log(prop + ':' + data[obj][prop][0]['STATE']); 
        console.log(prop + ':' + data[obj][prop][1]['STATE']); 
        console.log(prop + ':' + data[obj][prop][2]['STATE']); 

        console.log(prop + ':' + data[obj][prop][0]['COUNT']); 
        console.log(prop + ':' + data[obj][prop][0]['COUNT']); 
        console.log(prop + ':' + data[obj][prop][0]['COUNT']);      
       } 
      } 
      } 

     } 
    } 

JSON FILE

{ 
    "table":[ 
     { 
     "row":[ 
      { 
       "STATE":"A" 
      }, 
      { 
       "COUNT":"107" 
      } 
     ] 
     }, 
     { 
     "row":[ 
      { 
       "STATE":"I" 
      }, 
      { 
       "COUNT":"92" 
      } 
     ] 
     }, 
     { 
     "row":[ 
      { 
       "STATE":"R" 
      }, 
      { 
       "COUNT":"2" 
      } 
     ] 
     } 
    ] 
} 
+1

Почему вы не просто используете 'var table = obj.table ;', а затем используете' table.forEach (function (o) {var row = o.row; ...}); '? (также вы используете некоторые сомнительные JS - вместо for/in, используйте 'Object.keys (obj) .forEach (...)', и этот JSON очень странный: почему эти вещи не названы свойствами анонимным массивом позиции?) –

ответ

1

Определенно некоторые странные решения в вашей зацикливание. Но, попробуйте следующее:

var json = { 
    "table":[ 
     { "row":[ 
      {"STATE":"A"}, 
      {"COUNT":"107"} 
     ] 
     }, 
     { "row":[ 
      {"STATE":"I"}, 
      {"COUNT":"92"} 
     ] 
     }, 
     { "row":[ 
      {"STATE":"R"}, 
      {"COUNT":"2"} 
     ] 
     } 
    ] 
}; 

var table = json.table; 

for(var row in table) {  
    for(var field in table[row]) { 
     console.log('State: ' + table[row][field][0].STATE); 
     console.log('Count: ' + table[row][field][1].COUNT); 
    } 
} 

Работа jsfiddle: http://jsfiddle.net/pamsvofz/

Update: Я хотел бы добавить действительно не повод, чтобы иметь дополнительный row ключ в формате JSON. Это действительно просто делает вложение немного сложнее.

Смежные вопросы