2017-09-25 97 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"",没有反斜杠。

反斜杠被字符串文字视为转义序列。

您需要跳过反斜杠\\,将实际的反斜杠放入字符串中。