このツールの動作
入力は JSON の文字列リテラルになります。前後に引用符が付き、そのままでは書けない文字はすべて保護形式に置き換わります。
"は\"に、逆斜線は\\に。- 改行は
\n、タブは\t、復帰は\rに。 - ほかの制御文字は
\u00XXに。
é と 😀 はそのまま残ります。JSON は Unicode ですし、読める文字列のほうが保護記号の壁より優れています。
通常の実装が素通しにする二文字
U+2028(行区切り)と U+2029(段落区切り)は \u2028、\u2029 として出ます。標準的な JSON の実装はこれらを素のまま残します。
どちらの書き方も妥当な JSON です。保護したほうが安全で、その理由は歴史的でありながら今も生きています。ES2019 より前の JavaScript では、この二文字は行終端子でした。素のまま含む文字列リテラルは構文エラーだったのです。JSON を受け取って JavaScript として評価するもの——古い eval、JSONP のエンドポイント、データファイルを埋め込むバンドラー——はここに落ちます。保護の費用は三文字で、この種の障害がまるごと消えます。
孤立したサロゲートでも出力は壊れない
テキストにはサロゲート対の片割れが入り得ます。誤った位置で切られた文字列、データベースから出てきた途中で切れた列などです。出力はそれを素のまま出さず、\ud800 として保護します。
素の孤立サロゲートは UTF-8 にそもそも符号化できないので、これは重要です。保護すれば JSON は妥当なまま、UTF-8 のまま保たれ、壊れた文字は出力の中に見える形で残ります。運んでいるファイル自体を壊すことはありません。
保護しないもの
斜線です。\/ は正当な JSON で、</script> が出力に現れないようにこれを出す実装もありますが、必須ではなく、結果が読みにくくなります。
結果を HTML ページに埋め込むなら、</script> は HTML の層で扱ってください。HTML のパーサーはその並びが現れた場所で要素を閉じます。JSON をどれだけ保護しても、そこは変わりません。
プライバシー
すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。