2009-11-10 10 views
5

Pracuję z api last.fm, aby uzyskać obrazy wykonawców, i otrzymuję wyniki JSON, gdzie muszę sprawdzić wartość @attr . Niestety, nie mogę uzyskać dostępu do tej wartości. Wyniki wyglądać mniej więcej tak:Jak uzyskać dostęp do wartości @attr w JSON z 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"}} 

to, że ostatnia wartość, że nie mogę dostać się do ...

jakieś pomysły?

Próbowałem ["@attr"] i wydawało się, że nie działa, a tylko wróciło niezdefiniowane.

Robię $ .each (obj.image, function() {}) - w ramach I 'm pomyślnie uzyskiwanie this.url, this.format, etc - ale nie mam szczęście z tym [ '@attr']

+0

Właściwie próbowałem ["@attr"] i wydawało się, że nie działa, a tylko wróciło niezdefiniowane. Robię $ .each (obj.image) - iw ramach I 'm pomyślnie uzyskiwanie this.url, this.format, etc - ale nie mam szczęście z tym [' @ attr '] – majman

Odpowiedz

9

Użyj operatora bracket notation użytkownika:

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

Następnie można uzyskać dostęp do właściwości official przez:

value.official; 

Or

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

Albo

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

Edit: W Jonathan wskazał, masz problemy ze struktury JSON publikowanych, polecam Ci sprawdzić poprawność JSON z narzędzia jak JSONLint.

Ale myślę, że masz na myśli coś takiego:

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

I z tej struktury JSON można iteracyjne go:

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

Masz sporo problemów formatowania we fragmencie. Jeśli są one takie same w twoim aktualnym JSON-u, będziesz musiał przeanalizować i skonfliktować struktury obiektów, czego prawdopodobnie oczekujesz.

{ /* 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 po prostu wyciąć kilka rzeczy, które sprawiają, że przeglądanie jest trochę mniej nieporęczne - i wygląda na to, że mogłem poświęcić więcej uwagi. Dzięki za heads up – majman

Powiązane problemy