按属性获取JSON对象

时间:2011-09-17 03:16:54

标签: javascript json

说我有这个JSON对象:

var images = {"success":"true", "images":[
     {"id":"1234","url":"asdf","tags":["cookie","chocolate"]},
     {"id":"5678","url":"qwer","tags":["pie","pumpkin"]}
]};

获取ID为5678的图像网址的最有效方法是什么?可以使用jQuery。

4 个答案:

答案 0 :(得分:12)

因为它是一个数组而你正在寻找一个嵌入式属性,而不仅仅是一个简单的数组值,所以找不到它真的是一种超级有效的方法。有一种蛮力机制,只需走过数组,并将每个id与你正在寻找的内容进行比较。

如果您要在同一数据结构中多次查找这些类型的东西并且想要加快速度,那么您可以将现有数据结构转换为更有效的访问方式的数据结构这样的ID:

var imagesById = {
    "1234": {"url":"asdf","tags":["cookie","chocolate"]},
    "5678": {"url":"qwer","tags":["pie","pumpkin"]}
}

然后,通过id查找对象就像这样简单:

imagesById["1234"]

答案 1 :(得分:5)

url = $.grep(images.images, function(item) { return item.id === '5678' })[0].url;

答案 2 :(得分:2)

除非对ID进行排序,否则你不能比普通的旧迭代做得更好:

var images = {"success":"true", "images":[
     {"id":"1234","url":"asdf","tags":["cookie","chocolate"]},
     {"id":"5678","url":"qwer","tags":["pie","pumpkin"]}
]};

var inner = images.images,
    targetId = '5678',
    found = null;

for (var i=0; i<inner.length; i++) {
    if (inner[i][id] === targetId) {
        found = inner[i];
        // do stuff...
        break;
    }
}

答案 3 :(得分:2)

你必须遍历数组:

$.each(images.images,function(i,img) {
   if(img.url == "5678") {
        //do whatever you want with this url
    }
}