戻す - JSON文字列を作成する際に特殊文字をエスケープする方法は?




json シングルクォート エスケープ (6)

私の弦はここにあります

{
    'user': {
        'name': 'abc',
        'fx': {
            'message': {
                'color': 'red'
            },
            'user': {
                'color': 'blue'
            }
        }
    },
    'timestamp': '2013-10-04T08: 10: 41+0100',
    'message': 'I'mABC..',
    'nanotime': '19993363098581330'
}    

メッセージには一重引用符が含まれています。これはJSONで使用されている引用と同じです。 私がしていることは、メッセージなどのユーザ入力から文字列を埋めることです。 だから、私はコードを破る特別なシナリオのようなものから脱出する必要があります。 しかし、文字列置換以外にも、それらをエスケープする方法はありますか?それでも、HTMLを正しいメッセージに戻して処理できるようにする方法はありますか?


AlexBの投稿について:

 \'  Apostrophe or single quote
 \"  Double quote

単一引用符をエスケープするのは単一引用符付きのjson文字列でのみ有効です
二重引用符をエスケープすることは二重引用符付きのjson文字列でのみ有効です

例:

'Bart\'s car'       -> valid
'Bart says \"Hi\"'  -> invalid

JSON文字列は、 仕様に従って二重引用符で囲む必要があるため、エスケープする必要はありません。
JSON文字列で特殊文字を使用する必要がある場合は、 \を使用してエスケープできます。

JSONで使用されている次の特殊文字のリストを参照してください。

\b  Backspace (ascii code 08)
\f  Form feed (ascii code 0C)
\n  New line
\r  Carriage return
\t  Tab
\"  Double quote
\\  Backslash character


しかし、仕様に完全に反していても、作者は\'使うことができます。

これは悪いです:

  • 仕様に反する
  • もうJSONの有効な文字列ではありません

しかし、それはあなたが望むように、うまくいきます。

新しい読者のために、あなたのjson文字列には必ず二重引用符を使用してください。


これらの回答のほとんどは、質問に答えることも、説明に不必要に長くかかることもあります。

JSONは二重引用符だけを使用するので、わかりました。

私はJQuery AJAXを使用してJSONデータをサーバーにポストし、その後同じ情報を返すようにしていました。 私が見つけた投稿された質問に対する最良の解決策は、

var d = {
    name: 'whatever',
    address: 'whatever',
    DOB: '01/01/2001'
}
$.ajax({
    type: "POST",
    url: 'some/url',
    dataType: 'json',
    data: JSON.stringify(d),
    ...
}

これはあなたのために文字をエスケープします。

これはMark Amery、Great answer BTWでも示唆された

これが誰かを助けることを望みます。


私たちは皆、シングル引用されたjsonsは本当のjsonsではないと思う。 可能であれば、私たちは、 "二重引用符で囲まれたjson文字列の中で、私たちのためにそうするライブラリがなければ、エスケープするという問題に対処する必要があります。

それぞれを "\"で置き換えるのは大変ではありません。ユーザーは入力を入力することができます:\また、解析も失敗します(理由を考えてください)。

代わりに、最初に\を\(二重バックスラッシュ)に置き換えます。 それだけで、それぞれを "with"(バックスラッシュと ")で置き換えます。


私はパーティーには遅すぎるかもしれませんが、これは一重引用符をパース/エスケープします(パース対エスケープの戦いに入りたくない)。

JSON.parse("\"'\"")





json