JSON: Как выбрать массив внутри другого массива? - PullRequest
2 голосов
/ 19 мая 2011

У меня есть текущий файл JSON:

[{"id":"1","images":[{"img_id":"1"},{"img_id":"2"},{"img_id":"3"}]},
[{"id":"2","images":[{"img_id":"1"},{"img_id":"2"},{"img_id":"3"}]}

Как выбрать массив с идентификатором 1 и перечислить в нем каждый 'img_id', не повторяя его для другого массива?

изменить 1: Я пытаюсь разобрать это так, но этот код ошибочен:

$("#button").click(function() {
$.getJSON("../path/to/json", function(data) {
$.each(data[0].images.img_id, function(i,data){
var new_data ="<p src='path/to/folder/"+images.img_id+"'></p>";             
$(new_data).appendTo("#htmlTag");
});
}); return false;
});

Очень ценится.

Ответы [ 3 ]

0 голосов
/ 19 мая 2011

У вас есть массив объектов, где каждый объект содержит другой массив объектов.Я предполагаю, что используемая вами структура JSON:

var a = [{"id":"1","images":[{"img_id":"1"},{"img_id":"2"},{"img_id":"3"}]},
         {"id":"2","images":[{"img_id":"1"},{"img_id":"2"},{"img_id":"3"}]}];

Я также предполагаю, что вы используете JavaScript.


PostEdit:

Ваш код довольно близок, я думаю, что то, что у меня есть ниже, должно работать:

$("#button").click(function() {
    $.getJSON("../path/to/json", function(data) {
        $.each(data[0].images, function(i,data){
            var new_data ="<p src='path/to/folder/" + data.img_id + "'></p>";             
            $(new_data).appendTo("#htmlTag");
        });
    }); 

    return false;
});

Все, что я сделал, это изменил первый параметр на ваш each вызов с: data[0].images.img_id на: data[0].images.Кроме того, я изменил объявление new_data с:

var new_data ="<p src='path/to/folder/"+images.img_id+"'></p>"; 

на:

var new_data ="<p src='path/to/folder/"+data.img_id+"'></p>";

Обратите внимание, что параметр "data" в каждой функции обратного вызова является просто элементом вмассив, в то время как «я» является индексом этого элемента в массиве.Следовательно, данные - это объект, который выглядит следующим образом:

{"img_id":1}

Таким образом, вы можете получить идентификатор через data.img_id.Надеюсь это поможет.

0 голосов
/ 19 мая 2011

Я думаю, что в вашем JSON есть опечатка ... кажется, что в конце отсутствует скобка, и она была добавлена ​​в начале строки 2. Но, предполагая, что вы имели в виду это (и используете Javascript) :

var myJson = [{"id":"1","images":[{"img_id":"1"},{"img_id":"2"},{"img_id":"3"}]},
             {"id":"2","images":[{"img_id":"1"},{"img_id":"2"},{"img_id":"3"}]}];

тогда вы можете получить доступ ко всему, что вам нужно, как к вложенному объекту Javascript. Если вы хотите получить доступ только к объекту с идентификатором, равным 1, и порядок не гарантируется , вам придется выполнить итерацию:

for(var i = 0; i < myJson.length; i++){
    if(myJson[i].id === "1"){
        var imgs = myJson[i].images;
        for(var j = 0; j < imgs.length; j++){
            //do what you want with imgs[j].img_id
        }
    }
}
0 голосов
/ 19 мая 2011

Я думаю, что вы говорите о ссылках. Я не думаю, что они возможны в JSON. В случае, если они вам строго нужны и все еще требуется читаемая сериализация ваших объектов - я бы посоветовал вам изучить YAML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...