如何使用jQuery访问JSON中的“@attr”值

时间:2009-11-10 17:15:12

标签: javascript jquery json

我正在使用last.fm api获取艺术家图片,而我正在获取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']并且它似乎没有工作 - 只返回undefined。

我正在做一个$ .each(obj.image,function(){}) - 并且在我成功获得this.url,this.format等 - 但我没有运气这个[ '@attr']

2 个答案:

答案 0 :(得分:9)

使用bracket notation成员运营商:

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

然后您可以通过以下方式访问official属性:

value.official;

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

或者

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

修改:正如Jonathan指出的那样,您发布的JSON结构存在问题,我建议您使用JSONLint等工具验证您的JSON。< / p>

但我认为你的意思是这样的:

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);
});

答案 1 :(得分: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" }
        }