2015-09-28 3 views
1

Я пытаюсь Переберите это JSON, но это не working.I хочет проходные магазины, но он не работаетКак Переберите этот JSon массив с помощью JavaScript

В: JSON

{ 
    "type": "shops", 
    "shops": { 
     "1": { 
      "id": "1", 
      "name": "abcd", 
      "open_time": "9AM", 
      "closed_time": "9PM" 
     }, 
     "2": { 
      "id": "1", 
      "name": "efgh", 
      "open_time": "9AM", 
      "closed_time": "9PM" 
     } 
    } 
} 

сценарий

$.getJSON("simple.json", function(json) { 
    console.log("JSON Data: " + (json)); 
    for(var i = 0; i < json.shops.length; i++){ 

     console.log(json[i].shops.name); 

    } 
}); 

Это не дает мне никаких результатов

+6

'shops' не является массивом. Это объект. http://stackoverflow.com/questions/684672/loop-through-javascript-object – azium

+1

Не могли бы вы 'console.log (json);' и сказать мне, что он возвращает? – deepakb

+0

это дает мне [object Object] –

ответ

4

json.shops не является массивом, это объект. Вы можете использовать for..in петлю или $.each

Использование $ .each

$.getJSON("simple.json", function(json) { 
    console.log("JSON Data: " + (json)); 
    $.each(json.shops, function(key, shop){ 
     //key will be "1", "2"...n 
     console.log(shop.name, shop.id); 
    }); 
}); 

Использование for..in

 for(var shop in json.shops){ 
     //shop will be "1", "2"...n 
     if (json.shops.hasOwnProperty(shop)) 
      console.log(json.shops[shop].name); 
    } 
+0

$ .each вернет имена свойств здесь, 'value.name' и' value.id' не определены. – Stumblor

+0

Вы ошибаетесь, вы его протестировали? shop.name && shop.id не определены ... –

+1

Извинения - это был мой тест, который был неправ. :-) – Stumblor

0

json.shops.length неопределен, клюв ause shops - это объект, а не массив и не имеет (в данном случае) свойства «длина». но каждый объект JavaScript может иметь свойство, и эти имена свойств могут быть получены в виде списка, который вы можете итерации по:

for(var i = 0; i < Object.keys(json.shops).length; i++){ 

    console.log(json.shops[Object.keys(json.shops)][i].name); 

} 

или, альтернативно, принесите ключи объекта в качестве массива и использовать функцию forEach встроенной в массивах:

Object.keys(json.shops).forEach(function(element, arrayIndex, array) { 
    console.log(array[element].name); 
}); 
+0

Вы ошиблись в первом разделе кода - 'Object.keys (json.shops) [i]' вернет строковый ключ, а не объект. – Stumblor

+0

упс! хороший улов. –

+0

это дает мне неопределенную ошибку –

1

Как показано в комментариях, магазины являются объектом, а не массивом. Вы можете перебрать все свойства объектов JavaScript с помощью:

$.getJSON("simple.json", function(json) { 
    console.log("JSON Data: " + (json)); 
    for(var key in json.shops){ 
     if (!json.shops.hasOwnProperty(key)) continue; 
     console.log(json.shops[key]); 
    } 
}); 
Смежные вопросы