2017-05-03 447 views
1

我一直在試圖弄清楚爲什麼下面的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源代碼中嗎? –

回答

2

注入JSON轉換成JavaScript 源的最佳方式代碼(在使用服務器端語言生成JavaScript時),是直接將其注入到需要它的位置,而不是在需要它的字符串文本中被解析。

例如:

var foo = <json blob>; 

,這樣的結果將是

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

的JavaScript將其解釋爲一個對象字面從而導致對象,這是你想要什麼無論如何。這可以避免「嵌套」轉義序列的所有問題。

2

您需要爲想要顯示的每個反斜槓添加兩個\\。如果你解析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)

0

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