JSON:如何在另一个数组中选择一个数组?

时间:2011-05-18 20:40:00

标签: arrays json

我有当前的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"}]}

如何选择ID为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 :(得分:0)

我认为你在谈论参考资料。我不认为他们在JSON中是可能的。如果您严格需要它们并仍然希望对象的可读序列化 - 我建议您查看YAML

答案 1 :(得分:0)

您有一个对象数组,其中每个对象包含另一个对象数组。我假设您使用的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”只是数组中的元素,而“i”是数组中该元素的索引。因此,数据是一个如下所示的对象:

{"img_id":1}

因此,您可以通过data.img_id获取ID。希望这可以帮助。

答案 2 :(得分:0)

我认为你的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对象一样访问您需要的任何内容。如果您只想访问ID等于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
        }
    }
}