2017-04-26 6 views
0

JSONをJSオブジェクトにパースしようとしていますが、値に「\」文字と4文字が含まれているという問題があります。例えば。文字列はそのような何かになります:私はそれを解析するとJSON.parse()メソッドで ""の解析を避ける方法

"key": "Z13g\u003d" 

を私が取得:

"key": "Z13g=" 

は、この問題を解決するための簡単な方法はありますか?

+2

なぜ最初の場所でその問題はありますか? '\ u003d'はJSON文字列で' = 'を表現できる方法です。おそらくあなたの問題は、最初にJSONを作成したときにスラッシュをエスケープしないことでしょうか? – Quentin

+2

'\ u003d'はJSONの' = '文字を表す一つの方法です。パーサは正しく機能しています。 – cdhowie

+0

@Quentin最初の例は、元の文字列がどのように見えるか、そしてJavaScriptコードに戻って構文解析した後の2番目の例です。 –

答えて

1

JavaScriptに「\ u003d」のような文字列がある場合、その解析された文字列「=」と区別できません。 String.replace関数でも、文字列に\文字が見つかりません。

しかし、本当にバックスラッシュ文字を含む文字列を表現しようとしている場合は、別のバックスラッシュでエスケープする必要があります。

"\u003d"は文字列値"="を表し、"\\u003d"は文字列値"\u003d"を表します。

しかし、JSON.parseを呼び出すと状況がより複雑になります。文字列の値を再び解析するので、"\\u003d""="に変換します。

これを回避するには、バックスラッシュを二重にエスケープする必要があります。したがって、文字列の値は"\\\\u003d"になります。パーサーは"="ではなく"\u003d"に変換します。

console.log(JSON.parse("\"\u003d\"")); // "\u003d" -> "=" 
 
console.log(JSON.parse("\"\\u003d\"")); // "\\u003d" -> "=" 
 
console.log(JSON.parse("\"\\\\u003d\"")); // "\\\\u003d" -> "\u003d"

関連する問題