2015-08-18 4 views
0

Вот много примеров, как перебирать объекты javascript. Это работает на самом деле отлично для меняПетля через JSON с javascript

var text = '{"employees":[' + 
'{"firstName":"John","lastName":"Doe" },' + 
'{"firstName":"Anna","lastName":"Smith" },' + 
'{"firstName":"Peter","lastName":"Jones" }]}'; 

obj = JSON.parse(text); 
document.getElementById("demo").innerHTML = 
obj.employees[1].firstName + " " + obj.employees[1].lastName; 

Но не получилось, как перебирать значения в obj. Пробовал вот так

for(var k in obj) { 
    if (obj.hasOwnProperty(k)) { 
     if (obj.hasOwnProperty(k)) { 
      out +=("Key is " + k + ", value is" + obj[k].firstName); 
     } 
    } 
} 

но не удалось. Как вы можете видеть, украденные из примеров. Если кто-то может помочь с некоторым кодом javascript, чтобы перебирать пары ключ-значение JSON?

+2

Почему вы используете 'если (obj.hasOwnProperty (к)) {' дважды? – Cerbrus

+1

Почему вы пишете «текст» из строки, а затем разбираете ее вместо того, чтобы просто объявлять как объект в первую очередь, что было бы намного проще и семантически проще? – Popnoodles

+2

@Popnoodles: Я бы предположил, что эмулирует его получение из вызова ajax или подобного (но это предположение). –

ответ

2

После того, как синтаксический анализ, ваша obj переменная относится к объекту с employees свойством, которое ссылается на массив. Итак:

obj.employees.forEach(function(employee) { 
    // ... 
}); 

или

var i, employee; 
for (i = 0; i < obj.employees.length; ++i) { 
    employee = obj.employees[i]; 
    // ... 
} 

... или любой из нескольких других способов, описанных в this answer.

+1

отличное спасибо, мне нравится первый, он маленький и прямой – user3732793

1

Ваш пример json имеет родительских ключевых сотрудников, у которых есть дочерний массив объектов. Затем вам нужно пройти через массив, если вы знаете ключ, который вы можете использовать Object.keys, который будет возвращать список ключей в объекте в формате массива.

var text = '{"employees":[' + 
 
    '{"firstName":"John","lastName":"Doe" },' + 
 
    '{"firstName":"Anna","lastName":"Smith" },' + 
 
    '{"firstName":"Peter","lastName":"Jones" }]}'; 
 

 
obj = JSON.parse(text); 
 

 
Object.keys(obj).forEach(function(k) { //Loop through keys of obj. 
 
    obj[k].forEach(function(elm) { //Loop through all elements of first object array 
 
    console.log(elm.firstName+"_"+elm.lastName) 
 
    }) 
 
})

0

Это не работает, так как вы пытаетесь получить доступ к obj["employees"].firstName, которого нет.

for(var k in obj) { 
    if (obj.hasOwnProperty(k)){ 
    var employee = obj[k]; 
    for(var i in employee){ 
     out +="Key is " + i + ", value is" + employee[i].firstName; 
    } 
    } 
} 

ИЛИ

var employee = obj["employees"]; 
for(var i in employee){ 
    out +="Key is " + i + ", value is" + employee[i].firstName; 
} 
Смежные вопросы