我正在使用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']
答案 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" }
}