2010-06-16 125 views
2

我理解JSON的概念,但是在開始使用eBay的api後,我遇到了一個我以前從未見過的符號,並且想知道是否有人可以解釋它發生了什麼?JSON語法,這是什麼?

{ 
"findItemsByKeywordsResponse": [ 
    { 
     "ack": [ 
      "Success" 
     ], 
     "version": [ 
      "1.5.0" 
     ], 
     "timestamp": [ 
      "2010-06-16T08:42:21.468Z" 
     ], 
     "searchResult": [ 
      { 
       "@count": "0" 
      } 
     ], 
     "paginationOutput": [ 
      { 
       "pageNumber": [ 
        "0" 
       ], 
       "entriesPerPage": [ 
        "10" 
       ], 
       "totalPages": [ 
        "0" 
       ], 
       "totalEntries": [ 
        "0" 
       ] 
      } 
     ] 
    } 
] 

}

什麼是 「@count」 的事情嗎?我注意到,當我在鉻引用它,它拋出一個錯誤:

chrome error http://www.oth4.com/clip.jpg

,但在Firefox沒有。 JSON Lint報告它是有效的,因爲我期望...;)

+1

這是從XML創建的JSON嗎?因爲E4X使用'@ attribute_name'語法表示屬性。 – Amarghosh 2010-06-16 09:06:51

+0

我想可能是。 – dmp 2010-06-16 09:14:50

回答

6

它是一個屬性名稱,以@字符開頭。就這些。

使用square bracket notation可以訪問包含不能用點符號表示的字符的屬性。

currentPrice[0]['@currencyId'] 
+0

謝謝,這工作完美。那麼這個「@」符號沒有什麼特別的地方呢? – dmp 2010-06-16 09:06:16

+0

什麼也沒有,至少沒有JSON那麼重要。 – Quentin 2010-06-16 09:10:06

2

嘗試:

var currency = item.sellingStatus[0].currentPrice[0]["@currencyId"]; 

有沒有要求Javascript數組鍵是有效的JavaScript標識符。

+0

也謝謝,也工作過,但會接受上面的有用鏈接。 – dmp 2010-06-16 09:06:38

3

除了這裏的答案,當從JSON創建XML時,@通常出現在JSON屬性名稱中。 @代表一個XML屬性,因此它可以與它的新JSON形式的XML節點的子元素相區分。例如,在XML該特定項目可能是這樣的:

<searchResult count="0"> 
    </searchResult> 

正如已經建議,您可以訪問使用方括號的屬性。

+0

有用,謝謝。 – dmp 2010-06-16 09:14:31

0

在PHP中,如果要訪問名稱以無效字符開頭的屬性,則必須使用{'property_name'}。所以,如果你想從你的具體JSON例如訪問@count你應該試試這個:用

$json_decoded = json_decode($json_var); 
$count = $json_decoded->findItemsByKeywordsResponse[0]->searchResult[0]->{'@count'}; 

json_decode()函數將JSON轉換成一個PHP對象。