Как получить доступ к значению @attr в JSON с помощью jQuery - PullRequest
5 голосов
/ 10 ноября 2009

Я работаю с API last.fm для получения изображений художников и получаю результаты 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 ]

9 голосов
/ 10 ноября 2009

Используйте скобку член оператора:

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

Затем вы можете получить доступ к свойству official:

value.official;

или

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

Или

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

Редактировать: Как указал Джонатан , у вас есть проблемы со структурой JSON, которую вы публикуете, я бы порекомендовал вам проверить ваш JSON с помощью такого инструмента, как JSONLint .

Но я думаю, что вы имеете в виду что-то вроде этого:

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 голосов
/ 10 ноября 2009

У вас довольно много проблем с форматированием в вашем фрагменте. Если они совпадают в вашем фактическом 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" }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...