JSON解析错误反斜杠

JSON解析错误反斜杠

问题描述:

我一直在试图弄清楚为什么下面的JSON输入将无法在JSON.parse函数中解析。JSON解析错误反斜杠

{"World":"Hello\\Test"} 

上面的json被JSON.NET返回。

我已经尝试了多种方法来获得这个工作。正如你可以看到反斜杠被转义并且https://jsonlint.com/能够解析它。

我也有一个失败的样本,在https://jsfiddle.net/ckp0uc0p/3/以及。

任何帮助将不胜感激。

+0

[为什么jQuery JSON解析器需要双反斜杠?](http://stackoverflow.com/questions/3807537/why-does-the-jquery-json-parser-need-double-escaping -for-backslashes) – Brennan

+0

不幸的是,我不控制这些数据。我标记JSON.NET,因为这个数据似乎被该组件解析并以这种方式存储。 – Hozikimaru

+0

您发布的JSON有效。你究竟如何解析它?你真的把它作为一个字符串文字注入到JavaScript源代码中吗? –

注入JSON转换成JavaScript 源的最佳方式代码(在使用服务器端语言生成JavaScript时),是直接将其注入到需要它的位置,而不是在需要它的字符串文本中被解析。

例如:

var foo = <json blob>; 

,这样的结果将是

var foo = {"World":"Hello\\Test"}; 

的JavaScript将其解释为一个对象字面从而导致对象,这是你想要什么无论如何。这可以避免“嵌套”转义序列的所有问题。

您需要为想要显示的每个反斜杠添加两个\\。如果你解析JSON,显示2个反斜线你需要添加4

// inside a string to be parsed as json 
 
var json = '{"World":"Hello\\\\Test"}' 
 
console.log(JSON.parse(json)) 
 

 
// directly in an object 
 
var object = {"World": "Hello\\Test"} 
 
console.log(object)

try 
 
{ 
 
    var res = '{"World":"Hello\\\\Test"}'; 
 
\t var s = JSON.parse(res); 
 
    console.log(JSON.stringify(s)); 
 
    
 
} catch(error) { 
 
\t alert(error); 
 
}