2011-04-18 57 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