2017-05-03 36 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

はJavaScriptにソースをJSONを注入するための最良の方法コード(サーバーサイド言語でJavaScriptを生成する場合)は、必要な文字列リテラル内ではなく、必要な場所に直接挿入します解析される。例えば

var foo = <json blob>; 

結果はJavaScriptをリテラルは、あなたがしたいものですオブジェクト、その結果対象としてこれを解釈します

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

になるように、とにかく。これにより、 "ネストされた"エスケープシーケンスに関するすべての問題が回避されます。

2

表示するバックスラッシュごとに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); 
 
}