Добрый день! Имеется следующий массив JSON:
{
"boxes" : [
{
"name" : "Шляпная коробочка",
"flowers" : "Розы",
"types" : {
"MINI" : {
"size" : "15x15x15см",
"price" : "1000"
},
"M" : {
"size" : "20х20х21см",
"price" : "1300"
},
"L" : {
"size" : "22х22х23см",
"price" : "1700"
}
}
},
{
"name" : "Коробочка в форме сердца",
"flowers" : "Кустовые розы",
"types" : {
"MINI" : {
"size" : "16x13см",
"price" : "1200"
},
"M" : {
"size" : "19х15см",
"price" : "1500"
},
"L" : {
"size" : "22х17см",
"price" : "1700"
}
}
}
}]
Как получить, к примеру, все данные из элемента "types"? Т.е. я получил все из boxes:
$.getJSON('js/data.json', function(data) {
for(var i=0;i<data.boxes.length;i++){
console.log('Название: ' + data.boxes[i].name + '\n');
}
});
Но при попытках встроить еще один цикл for, все накрывается медным тазом.
UPD:
for (var key in data.boxes[i].types) {
console.log ('Доступные типы:' + key);
}
После этого кода появились доступные типы, т.е. "MINI", "M" и "L"...но неужели так нужно идти по всему многомерному объекту?
Во первых этот JSON синтексически неверен (перепутаны закрывающие скобки в последней строке), во вторых логически (подчиненные объекты types это объекты со свойствами "MINI", "M" и "L", а не массивы с автоиндексацией). Впрочем массивы в json это тоже объекты, свойства в которых задаются автоматически ("0","1","2", ...). Исходя из вашей логики json должен иметь вид:
{
"boxes" : [
{
"name" : "Шляпная коробочка",
"flowers" : "Розы",
"types" : [
"MINI" : {
"size" : "15x15x15см",
"price" : "1000"
},
"M" : {
"size" : "20х20х21см",
"price" : "1300"
},
"L" : {
"size" : "22х22х23см",
"price" : "1700"
}
]
},
{
"name" : "Коробочка в форме сердца",
"flowers" : "Кустовые розы",
"types" : [
"MINI" : {
"size" : "16x13см",
"price" : "1200"
},
"M" : {
"size" : "19х15см",
"price" : "1500"
},
"L" : {
"size" : "22х17см",
"price" : "1700"
}
]
}
]}
Тогда будет работать и первый способ организации цикла
for(var key1=0;i<data.boxes.length;key1++){
for(var key2=0;i<data.boxes[key1].types.length;key2++){
var something = data.boxes[key1].types[key2];
...
Но второй способ более универсален и более правильный для json:
for (var key1 in data.boxes) {
for (var key2 in data.boxes[key1].types) {
var something = data.boxes[key1].types[key2];
...
Он будет работать и с вашим и с моим вариантами json (при условии правильно расставленных закрывающих скобок).
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости