2011-11-19 109 views
0

有人可以请求解释一下为什么包含带双引号的字符串的json会打破$.parseJSON

这工作:

[{"type":"message","content":{"user":"tomasa", "time":"1321722536", "text":"asdasdasd"}}] 

这也适用于:

[{"type":"message","content":{"user":"tomasa", "time":"1321723267", "text":"""}}] 

然而这将导致$.jsonParse不返回任何东西(我假设监守它是一个畸形的JSON字符串:

[{"user":"tomasa", "time":"1321723278", "text":""""}}] 
+0

请张贴更是打破了解析器的JSON的例子。 –

+0

我们需要更多信息才能给出有意义的答案。这里没有人能够介意阅读。不过,您可能想查看JSON规范(http://www.json.org/); JSON本身相当简单。 – tdammers

+0

你能举个例子吗? – Shaun

回答

9

最后还有一个额外的}

}}] 

您应该通过http://jsonlint.com/

Parse error on line 6: 
...""" }}] 
---------------------^ 
Expecting ',', ']' 
+0

)好的,谢谢,有帮助。奇怪,因为应该有一个{在开始...但至少告诉我我的php导致问题 – Tomas

+2

@Tomas,今后尝试使用[JSONLint](http://jsonlint.com/)来验证您的JSON。 –

+0

@Tomas:如果你说最初应该有一个双“'”,那也是无效的。 – RightSaidFred

0

$ .parseJSON正在用双引号查找对象的名称,val单引号中的那个对象。这是你问的吗?

5

这不是""但extraenous }运行麻烦JSON标记有:

[{"user":"tomasa", "time":"1321723278", "text":""""}}] 
                  ^
0

因为JSON specification特别指出string元素定义为:

string 
    "" 
    " chars " 

换句话说,字符串值必须用双引号括起来才能成为有效的JSON。

编辑补充:

上面我的回答是原题正确,因为它是前贴了几秒钟,这基本上是“在不使用双引号,为什么jQuery.parseJSON失败” ,但是OP然后修改了这个问题,以包含一个能够证明他/她的实际问题的例子,这个例子根本与报价无关。

3

由于双重}而崩溃。

>>> $.parseJSON('[{"user":"tomasa", "time":"1321723278", "text":""""}}]') 
SyntaxError: JSON.parse: expected ',' or ']' after array element 
(function(a,b){function cy(a){return f...h]&&f.event.trigger(c,d,b.handle.elem 

但这个工程:

>>> $.parseJSON('[{"user":"tomasa", "time":"1321723278", "text":""""}]') 
[Object { user="tomasa", time="1321723278", text=""""}]