1. ホーム
  2. javascript

[解決済み] JavaScriptで改行文字を含むJSON文字列をエスケープする方法は?

2022-04-13 17:47:34

質問

改行文字を含むJSON文字列を作成する必要があります。これをエスケープして、AJAXコールを使って投稿する必要があります。どなたか、JavaScriptで文字列をエスケープする方法を提案していただけませんか?私はjQueryを使用していません。

解決方法は?

JSONを受け取り .stringify() となります。次に .replace() メソッドを使用して \n\\n .

EDITです。

私が知る限り、文字列中のすべての特殊文字をエスケープするための有名なJSライブラリはありません。しかし .replace() メソッドを使って、このように特殊文字をすべて置き換えることができます。

var myJSONString = JSON.stringify(myJSON);
var myEscapedJSONString = myJSONString.replace(/\\n/g, "\\n")
                                      .replace(/\\'/g, "\\'")
                                      .replace(/\\"/g, '\\"')
                                      .replace(/\\&/g, "\\&")
                                      .replace(/\\r/g, "\\r")
                                      .replace(/\\t/g, "\\t")
                                      .replace(/\\b/g, "\\b")
                                      .replace(/\\f/g, "\\f");
// myEscapedJSONString is now ready to be POST'ed to the server. 

でも、これって結構厄介なことですよね?関数は、コードを細かく分割して、スクリプトのメインフローをすっきりさせ、8本の鎖でつながれた .replace() を呼び出します。では、その機能を関数にまとめてみましょう。 escapeSpecialChars() . このファイルを prototype chainString オブジェクトを呼び出すことができます。 escapeSpecialChars() を直接Stringオブジェクトに適用することができます。

というように。

String.prototype.escapeSpecialChars = function() {
    return this.replace(/\\n/g, "\\n")
               .replace(/\\'/g, "\\'")
               .replace(/\\"/g, '\\"')
               .replace(/\\&/g, "\\&")
               .replace(/\\r/g, "\\r")
               .replace(/\\t/g, "\\t")
               .replace(/\\b/g, "\\b")
               .replace(/\\f/g, "\\f");
};

この関数を定義すると、コードの本体は次のようにシンプルになります。

var myJSONString = JSON.stringify(myJSON);
var myEscapedJSONString = myJSONString.escapeSpecialChars();
// myEscapedJSONString is now ready to be POST'ed to the server