3 回答

TA貢獻1833條經驗 獲得超4個贊
如果字符串是來自可靠來源,你可以使用eval然后JSON.stringify的結果。像這樣:
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }";
var json = JSON.stringify(eval("(" + str + ")"));
請注意,當您eval使用對象文字時,必須將其括在括號中,否則將大括號解析為塊而不是對象。
我也同意這個問題下的評論,即在開始時用有效的JSON編碼對象會更好,并且避免必須解析,編碼,然后可能再次解析它。HTML支持單引號屬性(只需確保對字符串中的任何單引號進行HTML編碼)。

TA貢獻1856條經驗 獲得超17個贊
你的字符串是無效的JSON,所以JSON.parse(或jQuery的$.parseJSON)將無法正常工作。
一種方法是使用eval“解析”“無效”JSON,然后stringify將其“轉換”為有效的JSON。
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }"
str = JSON.stringify(eval('('+str+')'));
我建議您不要試圖“修復”無效的JSON,而是先從有效的JSON開始。如何str生成,它應該在生成之前修復,而不是之后。
編輯:您說(在評論中)此字符串存儲在數據屬性中:
<div data-object="{hello:'world'}"></div>
我建議你在這里解決它,所以它可以只是JSON.parsed。首先,它們的鍵和值都需要用雙引號引用。它應該看起來像(HTML中的單引號屬性是有效的):
<div data-object='{"hello":"world"}'></div>
現在,您可以使用JSON.parse(或jQuery $.parseJSON)。
var str = '{"hello":"world"}';
var obj = JSON.parse(str);
添加回答
舉報