2012-06-23 19 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