2009-11-10 59 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