2010-06-16 101 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对象。