2016-04-23 30 views
1

我有一個JavaScript對象,其中包含一個屬性與另一個json字符串化對象的值。我無法將字符串的打印輸出版本返回到對象窗體。請參閱以下代碼。 console.log輸出內容爲json的字符串與jsonFromStr的右側完全相同。但是,JSON.parse(json)是好的,而JSON.parse(jsonFromStr)是錯誤的。這裏有什麼問題?Javascript JSON解析和stringify爲多個級別

的jsfiddle:http://jsfiddle.net/jma7889/qtmmpj2t/

level2Obj = { key2a: "foo", key2b: 3}; 
level2ObjJson = JSON.stringify(level2Obj); 
level1Obj = {key1a: "bar", key1b: {level2ObjJson}}; 

json = JSON.stringify(level1Obj); 
jsonFromStr = '{"key1a":"bar","key1b":{"level2ObjJson":"{\"key2a\":\"foo\",\"key2b\":3}"}}'; // same than json 

objFromStrify = JSON.parse(json); // OK 
objFromAssignedString = JSON.parse(jsonFromStr); // Uncaught SyntaxError: Unexpected token l in JSON at position 45 

回答

2

如果你這樣做,將工作:

jsonFromStr = '{"key1a":"bar","key1b":{"level2ObjJson":"{\\\"key2a\\\":\\\"foo\\\",\\\"key2b\\\":3}"}}'; 

的原因,你的版本不工作是轉義序列\"在這個時候解決,所以jsonFromStr實際值將是:

'{"key1a":"bar","key1b":{"level2ObjJson":"{"key2a":"foo","key2b":3}"}}' 

...這是無效的JSON。

您需要將這些轉義字符保留在JSON字符串中,並且您通過使用額外的斜槓轉義轉義序列本身來做到這一點。

+0

它這樣工作,謝謝! –

+0

不客氣。 – trincot

0
jsonFromStr = '{"key1a":"bar","key1b":{"level2ObjJson":{\"key2a\":\"foo\",\"key2b\":3}}}'; 

你有一個額外的 「」 爲level2ObjJson鍵的值,在上述代碼的代碼替換jsonFromStr