2014-02-05 53 views
0

我試圖從last.fm中提取一些數據。帶#號的javascript對象變量

我得到的答覆如下:

{ 
"tracks": { 
    "track": [ 
     { 
      "name": "Once Upon a Dream", 
      "duration": "203", 
      "loves": "738", 
      "mbid": "92078817-2e04-4bcd-9c43-ebb9c2d1823c", 
      "url": "http://www.last.fm/music/Lana+Del+Rey/_/Once+Upon+a+Dream", 
      "streamable": { 
       "#text": "0", 
       "fulltrack": "0" 
      }, 
      "artist": { 
       "name": "Lana Del Rey", 
       "mbid": "b7539c32-53e7-4908-bda3-81449c367da6", 
       "url": "http://www.last.fm/music/Lana+Del+Rey" 
      }, 
      "image": [ 
       { 
        "#text": "http://userserve-ak.last.fm/serve/34s/96432461.png", 
        "size": "small" 
       }, 
       { 
        "#text": "http://userserve-ak.last.fm/serve/64s/96432461.png", 
        "size": "medium" 
       }, 
       { 
        "#text": "http://userserve-ak.last.fm/serve/126/96432461.png", 
        "size": "large" 
       }, 
       { 
        "#text": "http://userserve-ak.last.fm/serve/300x300/96432461.png", 
        "size": "extralarge" 
       } 
      ] 
     } 

等等......

試圖訪問該答覆的圖像部分時,問題在於,圖像對象似乎有#text可變我嘗試訪問的信息的名稱。一個正常的response.tracks.track[i].image[0].text顯然不起作用。

是否有一些特殊的方式來訪問這個變量?

回答

3

您可以使用the square bracket notation訪問變量,像這樣:

response.tracks.track[i].image[0]['#text'] 
+0

噢,我的天啊,那應該是我嘗試過的下一件事。我想,這要花很多時間。工作得很好,謝謝! – Crimson

+0

我知道這種感覺,有時你只需要休息一下並回到它。很高興我能幫上忙。 – KylePlusPlus

2

這只是物體內部的鍵名。您不能通過點符號訪問它,因爲它包含無效字符,但可以使用括號表示法。這是一個非常簡單的例子,證明了這一點。

var foo = { 
    '#bar': 'http://www.google.com/' 
} 

foo['#bar'] // will return a string value of http://www.google.com/ 

如果您的密鑰包含任何無效字符,它必須包裝在一個字符串中。在你的情況下,你會得到一個總是包含字符串包裝的鍵名的JSON響應。

希望這會有所幫助!

+0

我不知道這是否正確的計算器使用情況,以進一步瞭解這一點,但是,是否有一個特別的原因讓任何人選擇將這樣一個名稱給變量? – Crimson

+0

我不得不說除了試圖給財產的名稱更多的意義。我的意思是,你可以在技術上使用你想要的任何名稱作爲JavaScript對象中的屬性名稱*(**只要其包含在單引號或雙引號內**)*但缺點是,不能使用點符號再次訪問該值。你迫使某人使用括號表示法,如果他們不知道它來自哪裏(即把它看作一個數組),可能會讓某人閱讀時感到困惑。 – W3Geek