2013-05-12 3532 views
15

我將從Web服務retreived的JSON對象存儲到javascript中的對象。在許多地方,它被串起來(這個obj經過一些插件,並且將它分離並存儲並且將其存儲),並且增加了多個斜線。我怎樣才能避免它?JSON.stringify在每次字符串化時都轉義雙引號

http://jsfiddle.net/MJDYv/2/

var obj = {"a":"b", "c":["1", "2", "3"]}; 
var s = ""; 
console.log(obj); 
s = JSON.stringify(obj); 
alert(s); // Proper String 
s = JSON.stringify(s); 
alert(s); // Extra slash added, Quotes are escaped 
s = JSON.stringify(s); 
alert(s); // Again quotes escaped or slash escaped but one more slash gets added 
var obj2 = JSON.parse(s); 
console.log(obj2); // Still a String with one less slash, not a JSON object ! 

所以,當解析這多個字符串我又結束了一個字符串。當試圖訪問它像一個對象崩潰。

我嘗試用replace(/\\/g,"")除去斜線,但我這樣結束:""{"a":"b","c":["1","2","3"]}""

回答

20

你是怎麼想到要發生什麼?

JSON.stringify在對已轉換爲JSON的數據調用時不起「身份」功能的作用。在設計上,它逃生引號,​​反斜線等

你需要調用JSON.parse()完全一樣多次,你叫JSON.stringify()找回你把在同一個對象。

+0

是的,我現在正在做同樣的事情,調用它兩次。但在一些地方,它召喚了3或4次。 – user88975 2013-05-12 14:16:24

+2

謝謝老兄。你讓我今天一整天都感覺很好。 – 2014-09-30 19:12:31

5

可避免只需在您想要的數據上調用JSON.stringify()一次就可以變成JSON。

+0

是的,但原始字符串經歷了一系列函數調用(在一些插件中),最後當它返回時我不確定它被串化了多少次。 – user88975 2013-05-12 14:27:39

+4

在你需要之前永遠不要把它串起來。直到那時,只需將數據添加到javascript'result'對象。 – 2013-05-13 05:02:28