我遇到了一個奇怪的小問題,它解析了一些帶有引號的JSON。我正在使用本機JSON.stringify和JSON.parse函數來執行此操作。如果我將一個對象中帶有引號的對象串起來,他們會像預期的那樣被轉義。如果我把它解析回一個對象,它再次正常工作。JSON.stringify /用引號解析奇怪點
問題發生在我將字符串化,然後將對象打印到頁面,然後解析生成的字符串。如果我嘗試這樣做,解析函數將失敗,因爲stringify在每個違規引號之前只放了一個斜線。
我需要實現這個目標的原因是我正在處理一個應用程序,該應用程序將存儲在數據庫中的內容動態加載爲JSON字符串。某些時候需要將字符串打印到頁面上,以便javascript可以找到它們並根據其內容構建頁面。我需要一些強大的將對象傳入和傳出字符串的方法,如果用戶輸入了錯誤的字符,這些字符串不會失敗!
我可以通過用替換調用在代碼中插入額外的斜槓來解決此問題,但我想知道是否有更好的方法來處理這個問題?
我已經把一對夫婦jsfiddles來說明什麼,我試圖描述:
http://jsfiddle.net/qwUAJ/(字符串化然後解析回)
var ob = {};
ob["number1"] = 'Number "1"';
ob["number2"] = 'Number 2';
ob["number3"] = 'Number 3';
var string = JSON.stringify(ob);
var reOb = JSON.parse('{"number1":"Number \"1\"","number2":"Number 2","number3":"Number 3"}');
$('div').html(string);
http://jsfiddle.net/a3gBf/4/(字符串化,然後打印,然後解析回)
// Make an object
var ob = {};
ob["number1"] = 'Number "1"';
ob["number2"] = 'Number 2';
ob["number3"] = 'Number 3';
// Turn the object into a JSON string
var string = JSON.stringify(ob);
// Printing the string outputs
// {"number1":"Number \"1\"","number2":"Number 2","number3":"Number 3"}
$('.stringified').html(string);
// Attempt to turn the printed string back into an object
var reOb = JSON.parse('{"number1":"Number \"1\"","number2":"Number 2","number3":"Number 3"}');
// This fails due to the single escaped quote marks.
感謝您提前給予任何幫助!
我認爲'replace()'是給出'JSON.stringify'輸出的唯一選項。 –
您正在將控制檯輸出中的文本複製到代碼中。你爲什麼要這樣做,而不是使用'string'變量?據我所知,瀏覽器中的輸出以瀏覽器認爲合適的方式顯示,甚至可能無法在代碼中有效(儘管如此,還不是100%)。例如,當你執行'JSON.parse(string);'時,它可以工作,然後執行'console.log(reOb)',你也可以看到新的輸出是:'Object {number1:「Number」1「」,number2 :「Number 2」,number3:「Number 3」}'由於'Number「1」「'中的重複引號,它甚至不會在代碼中解析。 – Nope
我不明白這個問題。爲什麼你第二次手動輸入字符串? http://jsfiddle.net/a3gBf/3/ –