2009-11-10 10 views
5

Sto lavorando con l'API last.fm per ottenere immagini dell'artista, e sto ottenendo risultati JSON dove devo controllare un valore '@attr' . Sfortunatamente, non riesco ad accedere a questo valore. I risultati sembrano qualcosa di simile:Come accedere a un valore '@attr' in JSON con jQuery

{"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"}} 

È quel ultimo valore che non posso arrivare a ...

tutte le idee?

Ho provato ['@attr'] e non ha funzionato, ha restituito undefined.

Sto facendo un $ .each (obj.image, function() {}) - e all'interno sto ottenendo con successo this.url, this.format, ecc. - ma non ho fortuna con questo [ '@attr']

+0

In realtà, ho provato ['@attr'] e non funzionava - restituito solo non definito. Sto facendo un $ .each (obj.image) - e all'interno sto ottenendo con successo this.url, this.format, ecc. - ma non ho fortuna con questo ['@ attr'] – majman

risposta

9

utilizzare l'operatore bracket notation membro:

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

Quindi è possibile accedere alla proprietà official da:

value.official; 

O

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

O

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

Edit: Come Jonathan sottolineato, avete problemi con la struttura JSON si posta, mi sento di raccomandare di convalidare il vostro JSON con uno strumento come JSONLint.

ma penso che vuoi dire qualcosa di simile:

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" 
    } 
    }] 
}; 

E con quella struttura JSON è possibile scorrere facendo:

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

Hai un bel paio di problemi di formattazione nel tuo snippet. Se questi sono gli stessi nel tuo vero JSON, avrai dei conflitti di parsing e struttura degli oggetti da ciò che probabilmente stai aspettando.

{ /* 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

I basta tagliare un po 'di materiale per renderlo un po' meno maneggevole da recensire - e sembra che avrei potuto usare più attenzione. Grazie per il testa a testa – majman

Problemi correlati