2017-09-25 418 views
0

當我在JSON字符串中通過\"轉義雙引號時,解析器失敗。但是,當我使用JSON.stringify時,它能夠以某種方式正確地轉義字符串。JSON字符串中是否支持雙引號?

我懷疑我沒有正確地轉義雙引號。查看代碼以獲取更多細節。

var data = { 
 
    "singleQuoteHtml": "<span class='qwer'>content</span>", 
 
    "doubleQuoteHtml": "<span class=\"qwer\">content</span>", 
 
    "singleQuote": "'hi'", 
 
    "doubleQuote": "\"hi\"" 
 
}; 
 

 
var dataString = '{"singleQuoteHtml": "<span class=\'qwer\'>content</span>",' 
 
    + '"doubleQuoteHtml": "<span class=\"qwer\">content</span>",' 
 
    + '"singleQuote": "\'hi\'",' 
 
    + '"doubleQuote": "\"hi\"' 
 
    + '}'; 
 

 

 

 
function Parse() 
 
{ 
 
    //Stringify is capable of creating single quotes and double quotes 
 
    console.log(JSON.parse(JSON.stringify(data))); 
 
    
 
    //When I escape double quotes myself the parser fails 
 
    //Uncomment to see failure 
 
    //console.log(JSON.parse(dataString)); 
 
}
<button onclick="Parse();">Parse JSON </button>

+1

爲什麼你想使用字符串連接創建'dataString'?爲什麼不創建一個普通的JavaScript對象,然後使用'JSON.stringify()'創建'dataString',這將解決轉義時可能發生的許多問題。 –

+0

實際的代碼是基於Java的。數據可用於我的是一個普通的舊字符串,而不是Java對象。所以我不確定如何在Java中使用這些約束進行串聯。但你可能是對的。一旦發現問題,可能會少一點頭痛。 –

+0

在Java中,您可以避免通過爲'TestClass'添加'String'屬性並通過'String jsonRawString = objectMapper.writeValueAsString(testObject)'反序列化TestClass'來手動轉義字符串' –

回答

4

的字符串文字'... "\"hi\""...'評估爲""hi"",沒有反斜槓。

反斜槓被字符串文字視爲轉義序列。

您需要跳過反斜槓\\,將實際的反斜槓放入字符串中。

相關問題