2012-06-23 22 views
3

我正在ASP.NET页面上使用JQuery创建一个脚本。有一个JSON字符串,它看起来像这样:从JSON字符串返回特定对象?

<input id="hfImages" type="hidden" value="[ 
{"ProductID": "000001", 
"Small": "http://myimages.com/images/I/75.jpg", 
"Medium": "http://myimages.com/images/I/160.jpg", 
"Large": "http://myimages.com/images/I/320.jpg", 
"Thumb": "http://myimages.com/images/I/30.jpg"}, 

{"ProductID": "000002", 
"Small": "http://myimages.com/images/I/75ab.jpg", 
"Medium": "http://myimages.com/images/I/160j.jpg", 
"Large": "http://myimages.com/images/I/320y.jpg", 
"Thumb": "http://myimages.com/images/I/30ii.jpg"}, 

{"ProductID": "000003", 
"Small": "http://myimages.com/images/I/75.jpg", 
"Medium": "http://myimages.com/images/I/160.jpg", 
"Large": "http://myimages.com/images/I/320.jpg", 
"Thumb": "http://myimages.com/images/I/30.jpg"} 
]"/> 

我从这个字符串创建一个对象:

var images = $.parseJSON($("#[id*='hfImages']").val()); 

有一个变种叫ProductID包含的“产品ID”的值,我需要从获得这个JSON字符串,但我不知道该怎么做。最终(一旦我检索此字符串从正确的数据),我希望能够做这样的事情:

$("#productImages img.small").src(image[0].Small) 
$("#productImages img.medium").src(image[0].Medium) 
$("#productImages img.large").src(image[0].Large) 
$("#productImages img.thumb").src(image[0].Thumb) 

我见过的例子是遍历JSON对象,直到它找到所需的'钥匙',但我认为有一个更简单的方法来做到这一点.filter.map

对Javascript/JQuery和JSON很新颖。 似乎就像我有一个所谓的“产品ID”,但我正在阅读的一切并不是指单个键。就好像,名称/值中的每个名称都被视为关键字。

我的问题找到一个很好的例子,如何做到这一点很可能与我不知道这里涉及的一切的正确术语有关。

有人可以告诉我一个如何从上述JSON获取对象的JQuery示例,因为所需的ProductID在var ProductId中存储为字符串? (var ProductID =“000002”;)

我也很感谢任何关于JSON和JQuery的良好引用的链接。我去过json.org和其他几个人,但他们对我的知识水平没有太大的帮助。 :S

+0

不要忘了htmlescape是JSON在HTML属性 – Bergi

回答

3

如果您想要查找具有给定产品ID的相应元素,则可以使用.grep()函数。

像这样:

var productID = '000002'; 
var images = $.parseJSON($("#[id*='hfImages']").val()); 
var filteredImages = $.grep(images, function() { 
    return this.ProductID == productID; 
}); 

if (filteredImages.length > 0) { 
    // at least one element inside the images array matched the filter criteria 
    var product = filteredImages[0]; 

    // you could use product.Small, product.Medium, ... here 
} 
+0

但是,我不想被索引引用数组。我需要返回“ProductID”= ProductID的元素。没有一种方法会从属性等于特定值的对象数组中返回对象吗?也许我没有清楚地说出我的问题。对不起。 – rwkiii

+0

是的,这个方法被称为'.grep()'。看到我更新的答案。 –

+0

这是我需要做的。不.filter或.map做类似.grep的东西?我问,因为我的脚本的另一部分使用.filter和.map来查找匹配几个条件的特定元素。我真的不明白它是如何工作的。 – rwkiii