2009-11-10 20 views
5

我正在使用last.fm api獲取藝術家圖片,並且我得到了JSON結果,我需要檢查'@attr'值。不幸的是,我似乎無法訪問這個值。結果是這個樣子:如何使用jQuery在JSON中訪問'@attr'值

{"image":[{ 
    "url":"http:\/\/www.last.fm\/music\/Undefined\/+images\/3040021", 
    "format":"jpg", 
    "sizes":{"size":{"#text":"http:...jpg","name":"original","width":"397","height":"397"},{"#text":"http:...jpg","name":"large","width":"126","height":"126"},]}, 
    "@attr":{"official":"yes"}} 

它是最後一個值,我不能去......

什麼想法?

我試過['@attr'],它似乎沒有工作 - 只返回未定義。我正在做一個$ .each(obj.image,function(){}) - 在我成功得到this.url,this.format等 - 但我沒有運氣與此[ '@attr']

+0

其實我試過['@attr'],它似乎沒有工作 - 只返回undefined。 我正在做一個$ .each(obj.image) - 在我成功得到this.url,this.format等 - 但我沒有運氣與此['@ attr'] – majman 2009-11-10 17:32:50

回答

9

使用bracket notation成員運算符:

value.official; 

或者

var value = obj[0]['@attr']; 

然後,您可以通過訪問official財產

obj[0]['@attr']['official']; 

或者

obj[0]['@attr'].official; 

編輯:作爲Jonathan指出的那樣,你有你發佈JSON結構的問題,我建議你與像JSONLint工具驗證您的JSON。

但我認爲你的意思是這樣:

var obj = { 
    "image": [{ 
    "url": "http:\/\/www.last.fm\/music\/Undefined\/+images\/3040021", 
    "format": "jpg", 
    "sizes": [{ 
     "#text": "http:...jpg", 
     "name": "original", 
     "width": "397", 
     "height": "397" 
    }, 
    { 
     "#text": "http:...jpg", 
     "name": "large", 
     "width": "126", 
     "height": "126" 
    } 
    ], 
    "@attr": { 
     "official": "yes" 
    } 
    }] 
}; 

有了這樣的JSON結構,你可以通過遍歷它:

$.each(obj.image, function() { 
    alert(this['@attr'].official); 
}); 
2

你有相當程式碼中有幾個格式問題。如果這些在您的實際JSON中是相同的,那麼您將會得到您可能期望的解析和對象結構衝突。

{ /* no matching end */ 
    "images": [ /* no matching end */ 
     { 
      "url":"http:\/\/www.last.fm\/music\/Undefined\/+images\/3040021", 
      "format":"jpg", 
      "sizes": { /* should this be an array instead? */ 
       "size": { 
        "#text":"http:...jpg", 
        "name":"original", 
        "width":"397", 
        "height":"397" 
       }, 
       { /* missing key */ 
        "#text":"http:...jpg", 
        "name":"large", 
        "width":"126", 
        "height":"126" 
       }, /* trailing comma can cause parsing issues */ 
       ] /* no matching start */ 
      }, 
      "@attr": { "official":"yes" } 
     } 
+0

我只是削減一堆東西,使其不太複雜的審查 - 看起來像我可以使用更多的照顧。感謝您的高舉 – majman 2009-11-10 18:46:27