2011-04-18 56 views
0

在制作jQuery AJAX请求后,我得到了'无效的JSON'。这个请求代码并不重要,所以我选择忽略它。jQuery中的正则表达式支持(1.5.2)

我已经深入了解jQuery库,并将相关的代码汇总到下面的代码片段中。因此,鉴于我的请求返回字符串“{'x':'1'}”,为什么在处理它的过程中,jQuery返回“{'x':']'}”?

//regex values stripped from jQuery 1.5.2. 
var data = "{'x':'1'}"; 
var rvalidchars = /^[\],:{}\s]*$/; 
var rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g; 
var rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g; 
var rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g; 

//test the various stages of data.replace from the jQuery library 
alert (data.replace(rvalidescape, "@")); // {'x':'1'}" 
alert (data.replace(rvalidescape, "@").replace(rvalidtokens, "]")); //{'x':']'}" 
alert (data.replace(rvalidescape, "@").replace(rvalidtokens, "]").replace(rvalidbraces, "")); //{'x':']'}" 

您可以在this JSFiddle

Moreoever看到它,下面的转换发生:

'{x:12}' --> '{x:]}' 
'{"x":"12"}' --> '{],]}' 

我猜有人为什么正则表达式做这可以向我解释,但我也很好奇jQuery为什么要这样做。

任何帮助,将不胜感激

回答

2

从外观上来看,jQuery是取代任何ISN”使用']'表示有效的JSON令牌。有些东西,比如'null','true','false'等可以插入而不用引号。事实上,数字也可以!

您的JSON无效,因为您需要双引号值。因此,要么:

{"x": 1} 

{"x": "1"} 

应该工作。你的复制代码仍然破坏了这一点,但通过jQuery.parseJSON()抛出它可以很好地适用于我。

+0

感谢您的建议。认为我一定在做一些愚蠢的事情。这一切都与正确形成的JSON正常工作。 – 2011-04-18 12:57:40

+0

引用的jquery逻辑受到http://cdnjs.cloudflare.com/ajax/libs/json2/20130526/json2.js的启发 – 131 2014-06-01 21:23:36