javascript 埋め込み json のエスケープ

アプリケーションから html 内の javascript 定数へ json を吐き出した時のダブルクォーテーションやシングルクォーテーションのエスケープでハマったのでメモ

captionへ「Hello "World" '23」という文字列を投入しようとした場合

まずは、アプリケーションのjsonライブラリから得られる文字列
    {"caption":"Hello \"World\" '23"}

上記をjavascriptへシングルクォーテーションでそのまま落とすと
    const json = '{"caption":"Hello \"World\" '23"}';

シングルクォーテーション('23の所)をエスケープして
    const json = '{"caption":"Hello \"World\" \'23"}';
    const jsonArray = JSON.parse(json);
問題なさそげだけどブラウザに \"World \" の所でエラーが報告される

これ、変数 json に代入された時点で \" がエスケープされて
{"caption":"Hello "World" '23"}
これを JSON.parse へ渡しても \" がエスケープされてないという事になる
正しくは {"caption":"Hello \"World\" '23"}でなければならないので
エスケープのエスケープが必要となる

    const json = '{"caption":"Hello \\"World\\" \'23"}';
    const jsonArray = JSON.parse(json);




コメント