このツールでできること
JSON 文字列とは、ダブルクォートで囲まれたテキストのうち、一部の文字をバックスラッシュ付きで書いたものです。ダブルクォートは \"、バックスラッシュは \\、改行は \n、タブは \t になります。このツールは、入力したテキストをこの形式の文字列に書き換えます。JavaScript の JSON.stringify に文字列を渡したときと同じ処理です。
ある JSON ドキュメントの1つのフィールドに、別の JSON や、クォートや改行を含むテキストを入れたいときに必要になります。エスケープを手で書くのは時間がかかり、間違えやすい作業です。バックスラッシュが1つ抜けただけで、ペイロード全体が不正な JSON になってしまいます。
使い方
- 左のボックスにテキストか JSON を貼り付けるか、ファイルを開く または サンプル を押します。
- 入力に合わせて、右側にエスケープ済みの文字列が表示されます。
- 必要なオプションを選びます。
- 先に JSON を詰める:正しい JSON から整形の空白を取り除いてからエスケープします。初期設定でオンです。
- クォートで囲む:外側のダブルクォートを付けます。貼り付け先にすでにクォートがある場合はオフにしてください。
- 非 ASCII 文字を \u でエスケープ:アクセント付きの文字、記号、日本語などの ASCII 以外の文字を
\uコードで書きます。
- コピー を押すか、ダウンロード でテキストファイルとして保存します。
ボックスの下の行には、入力が正しい JSON だったかどうかと、結果の文字数が表示されます。
変換例
クォートと改行を含む通常のテキストです。
He said "hello"
then left.
これが次のようになります。
"He said \"hello\"\nthen left."
先に JSON を詰める をオンにして、整形済みの JSON を変換した場合です。
{
"name": "Ada",
"tags": ["admin", "dev"]
}
これが次のようになります。
"{\"name\":\"Ada\",\"tags\":[\"admin\",\"dev\"]}"
先に JSON を詰める をオフにすると、インデントも残ったままエスケープされるので、{ と改行、"name": "Ada" は次のようになります。
"{\n \"name\": \"Ada\"\n}"
Windows のパスでは、すべてのバックスラッシュが2つになります。
"C:\\Users\\Ada\\notes.txt"
非ASCII文字(日本語など)
JSON の文字列にはどんな Unicode 文字でも入れられるので、Café 東京 はそのままで正しい JSON です。
"Café 東京"
古いシステム、ターミナル、バイト数に制限のあるフィールドの中には、ASCII しか受け付けないものがあります。非 ASCII 文字を \u でエスケープ をオンにすると、同じテキストが次のようになります。
"Caf\u00e9 \u6771\u4eac"
日本語の文章は、ひらがな、カタカナ、漢字のすべてが ASCII 以外の文字なので、このオプションをオンにすると1文字ごとに \u コードになり、結果はかなり長くなります。受け取る側が UTF-8 を扱えるなら、オフのままで問題ありません。
ほとんどの絵文字のように、基本多言語面(BMP)の外にある文字は、2つのコード(サロゲートペア)で書かれます。にっこり笑う顔の絵文字は "\ud83d\ude00" になります。どの JSON パーサーでも、これらは元の文字に戻せます。
外側のクォートなしで出力する
文字列をテンプレート、フォームの入力欄、すでにあるクォートの中に入れる場合は、クォートで囲む をオフにします。すると、Tab、タブ、here と続くテキストは次のように出力されます。
Tab\there
仕組み
このツールはブラウザ標準の JSON.stringify を使っているので、エスケープは JSON の標準どおりに行われます。その前に、先に JSON を詰める がオンで入力が { か [ で始まっていれば、入力を JSON として読み込もうとします。読み込めた場合は、数値を書いたとおりに保ったまま、空白なしで JSON を書き出します。そのあと、テキスト全体を1つの文字列としてエスケープします。サーバーには何も送信されません。
ヒントと制限事項
- 結果は JSON 文字列であり、JavaScript のテンプレートリテラルやシェルの文字列ではありません。シェルや一部の言語では、さらにその言語のクォートが必要です。
- 結果をもう一度文字列化すると、二重にエスケープされた文字列になります。API がそれを求めている場合もありますが、たいていはバグのサインです。
- 大きな入力も問題ありません。処理は端末内で行われ、速度はお使いの端末の性能によります。
ほかの方法
JavaScript:JSON.stringify(text) でエスケープした文字列が返ります。オブジェクトを埋め込むには JSON.stringify(JSON.stringify(obj)) を使います。
Python:文字列に対して json.dumps(text) を使うと同じ結果になります。初期設定では非 ASCII 文字がエスケープされるので、日本語などをそのまま残したいときは ensure_ascii=False を指定してください。
jq:jq -Rs . file.txt は、ファイル全体を生のテキストとして読み込み、1つの JSON 文字列として出力します。
関連ツール
エスケープされた文字列を読めるテキストや JSON に戻すには、JSON アンエスケープツール を使ってください。先に JSON をチェックしたり整形したりするには JSON整形ツール を、スプレッドシートから JSON を作るには CSV JSON 変換ツール をお使いください。