2009-11-10 16 views
5

Estoy trabajando con la API de last.fm para obtener imágenes de artistas, y obtengo los resultados de JSON donde necesito verificar un valor '@attr' . Lamentablemente, parece que no puedo acceder a este valor. Los resultados parecen algo así como:¿Cómo accedo a un valor '@attr' en 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"}} 

es que el último valor que no puedo llegar a ...

alguna idea?

Intenté ['@attr'] y parece que no funcionó, solo devuelto indefinido.

Estoy haciendo $ .each (obj.image, function() {}) - y estoy obteniendo this.url, this.format, etc. con éxito - pero no estoy teniendo suerte con esto [ '@attr']

+0

Realmente probé ['@attr'] y parece que no funcionó - solo devuelto indefinido. Estoy haciendo $ .each (obj.image) - y estoy obteniendo this.url, this.format, etc. correctamente, pero no estoy teniendo suerte con esto ['@ attr'] – majman

Respuesta

9

utilizar el operador bracket notation miembro de:

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

A continuación, puede acceder a la propiedad official por:

value.official; 

O

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

O

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

Editar: Como Jonathan señalado, tiene problemas con la estructura JSON que publique, le recomiendo que validar su JSON con una herramienta como JSONLint.

pero creo que quiere decir algo como esto:

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

Y con esa estructura JSON se puede iterar por:

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

Usted tiene bastantes problemas de formato en su fragmento. Si estos son los mismos en su JSON real, tendrá conflictos de análisis y estructura de objetos de lo que probablemente esté esperando.

{ /* 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 simplemente corté un montón de cosas para que sea un poco menos difícil de revisar, y parece que podría haber usado más cuidado. Gracias por el aviso – majman

Cuestiones relacionadas