2011-01-24 141 views
0

我遇到以下問題,因爲我升級了我的prototypeJS框架。將「已轉換」的對象字符串轉換爲JSON或對象

JSON解析無法將此字符串轉換爲對象。

"{empty: false, ip: true}" 

以前在1.6版本有可能,現在它必須是一個「有效的」 JSON字符串像

'{"empty": false, "ip": true}' 

但我怎麼能轉換成第一例回一個對象?

回答

6

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)); 
1

它是有道理的,json解析器不接受第一個輸入,因爲它是無效的json。你在第一個例子中使用的是javascript對象表示法。可以使用eval()函數將其轉換爲對象。

var str = "({empty: false, ip: true})"; 
var obj = eval(str); 

當然你只應該這樣做,如果你有保證你將執行的代碼是保存。 你可以找到更多關於JSON規格here的信息。一個json驗證器可以被發現here

編輯:以上泰國的回答可能是一個更好的解決方案

+2

您需要的順序添加括號的JavaScript引擎看到它作爲一個對象,而不是塊。 `eval('('+ str +')')`。 – Thai 2011-01-24 11:38:27

+0

謝謝,這對我的作品:) – Maertz 2011-01-24 12:28:19