我遇到以下問題,因爲我升級了我的prototypeJS框架。將「已轉換」的對象字符串轉換爲JSON或對象
JSON解析無法將此字符串轉換爲對象。
"{empty: false, ip: true}"
以前在1.6版本有可能,現在它必須是一個「有效的」 JSON字符串像
'{"empty": false, "ip": true}'
但我怎麼能轉換成第一例回一個對象?
我遇到以下問題,因爲我升級了我的prototypeJS框架。將「已轉換」的對象字符串轉換爲JSON或對象
JSON解析無法將此字符串轉換爲對象。
"{empty: false, ip: true}"
以前在1.6版本有可能,現在它必須是一個「有效的」 JSON字符串像
'{"empty": false, "ip": true}'
但我怎麼能轉換成第一例回一個對象?
JSON需要被引用的所有按鍵,所以這樣的:
"{empty: false, ip: true}"
不是有效的JSON。你需要預處理它才能解析這個JSON。
function preprocessJSON(str) {
return str.replace(/("(\\.|[^"])*"|'(\\.|[^'])*')|(\w+)\s*:/g,
function(all, string, strDouble, strSingle, jsonLabel) {
if (jsonLabel) {
return '"' + jsonLabel + '": ';
}
return all;
});
}
(Try on JSFiddle)它使用一個簡單的正則表達式替換詞,隨後是冒號,與一字雙引號內引用。正則表達式不會引用其他字符串中的標籤。
然後你就可以放心地
data = JSON.parse(preprocessJSON(json));
您需要的順序添加括號的JavaScript引擎看到它作爲一個對象,而不是塊。 `eval('('+ str +')')`。 – Thai 2011-01-24 11:38:27
謝謝,這對我的作品:) – Maertz 2011-01-24 12:28:19