помочь с доступом к узлам в файле JSON в JavaScript - PullRequest
0 голосов
/ 06 августа 2011

Мне нужна ваша помощь со структурой JSON!(Я знаю, что это легко, но я не могу понять, в чем ошибка).

в этом коде у меня есть файл json, который содержит список элементов (скажем, ресторанов) вместе с некоторыми деталями для каждой ветви, как адрес.В моем файле js я пытаюсь распечатать все адреса, которые соответствуют определенному идентификатору элемента.

Я опубликую образец файла json и код js для доступа к нему.

здесьфайл json:

{
"items" : 
[

{
"item_id" :"204","details" :[{"country":"usa","city":"NY", "address":"bla bla bla"},{"country":"usa","city":"NY", "address":"another bla bla bla for the same id"}]
},
{
"item_id" :"234","details" :[{"country":"usa","city":"NY", "address":"another bla bla bla"}]
}

]
}

и вот код js для доступа к этому файлу:

.....
success:function(data){
        $.each(data.items, function(i,item){
                if (item.item_id == 204 ) {
            $("#results").append("<hr/>");
                $("#results").append("<span class='result' >" + item.details.address + "</span><br/>");
    }
      });
    }, ....

, но он ничего не печатает.

Что делатьты думаешь?

Ответы [ 3 ]

1 голос
/ 06 августа 2011

Ваш JSON действителен, так что это не проблема.

{
    "items": [
        {
            "item_id": "204",
            "details": [
                {
                    "country": "usa",
                    "city": "NY",
                    "address": "bla bla bla"
                },
                {
                    "country": "usa",
                    "city": "NY",
                    "address": "another bla bla bla for the same id"
                }
            ]
        },
        {
            "item_id": "234",
            "details": [
                {
                    "country": "usa",
                    "city": "NY",
                    "address": "another bla bla bla"
                }
            ]
        }
    ]
}

Вы можете просмотреть измененный пример по адресу: http://jsfiddle.net/wKDUu/. Приведенный ниже код перебирает детали для обеспечения более динамичного подхода.

success:function(data){ 
    var di = data.items;     
    for(var i=0;i<di.length;i++){ 
        var ii = di[i]; 
        if (ii.item_id == 204 ) {              
            $("#results").append("<hr/>"); 
            for(var a=0;a<ii.details.length;a++){ 
                $("#results").append("<span class='result' >" + ii.details[a].address + "</span><br/>"); 
            } 
        }        
    }    
}),
1 голос
/ 06 августа 2011

На самом деле вам не нужно использовать $ .each в этом случае, потому что у вас есть массив объектов, т.е. [{}, {}, {}] - это массив объектов, даже если у вас фактически есть массив массивов объектов: p.Каждый объект имеет определенный индекс, то есть «элемент», тогда как каждый массив объектов имеет индекс по умолчанию 0,1,2 и т. Д.

Также да, поскольку у вас есть массив деталей объекта адреса, вам необходимо получить доступчерез details[0] или details[1]

Проверьте этот пример на jsFiddle

for(var i =0;i<data.items.length;i++) {

if (data.items[i].item_id == "204" ) {
            $("#results").append("<hr/>");
                $("#results").append("<span class='result' >" + data.items[i].details[0].address + "</span><br/>");
    }
}
0 голосов
/ 06 августа 2011

Поскольку item.details - это массив, вам нужно получить его через item.details[0].address

...