本文へスキップ
Case Converter Online
ja

JSONアンエスケープツール

バックスラッシュだらけのエスケープされた JSON 文字列を貼り付けると、元のテキストや JSON を整形された読みやすい形で取り出せます。

エスケープされた JSON 文字列を貼り付けるか、「サンプル」を押してください。処理はすべてブラウザ内で行われます。

アンエスケープ(unstringify)とは

JSON が文字列の中に保存されると、その中のダブルクォートはすべて \"、改行は \n、バックスラッシュは \\ と書かれます。ログファイル、メッセージキュー、Webhook のペイロード、ブラウザの開発者ツール、JSON をテキストとして保存しているデータベースの列などでよく目にします。正しい形式ではありますが、読みにくいものです。

"{\"name\":\"Ada\",\"tags\":[\"admin\",\"dev\"]}"

アンエスケープはこのエスケープを元に戻し、元の値を取り出す処理です。その値が JSON であれば、このツールは読みやすいように整形もします。

使い方

  1. 左のボックスにエスケープされた文字列を貼り付けるか、ファイルを開く または サンプル を押します。
  2. 入力に合わせて、右側に結果が表示されます。
  3. オプションを設定します。
    • 入れ子の文字列も戻す:結果がさらにエスケープされた文字列だった場合も、続けて元に戻します。初期設定でオンです。
    • 結果が JSON の場合:インデントをスペース2つ、スペース4つ、そのまま から選べます。
  4. コピー を押すか、ダウンロード でテキストファイルとして保存します。

ボックスの下の行には、結果が正しい JSON かどうかと、何層分のエスケープを解除したかが表示されます。

変換例

上の文字列を、結果が JSON の場合 をスペース2つにして変換すると、次のようになります。

{
  "name": "Ada",
  "tags": [
    "admin",
    "dev"
  ]
}

外側のクォートがないエスケープ済みテキストにも使えます。この入力は

Line one\nLine two\t(tabbed)

2行になり、(tabbed) の前には本物のタブが入ります。

Line one
Line two	(tabbed)

Unicode エスケープもデコードされます。"Café 東京" は Café 東京 になります。API のレスポンスやログで日本語が こんにちは のような形になっているときも、貼り付ければ こんにちは と読める文字に戻ります。

二重にエンコードされた文字列

データが2回文字列化されることがあります。するとバックスラッシュが積み重なります。

"\"{\\\"event\\\":\\\"signup\\\",\\\"user\\\":7}\""

入れ子の文字列も戻す がオンなら、2層とも解除して「結果は正しい JSON です。 2層を解除しました。」と表示します。そのまま を選んだ場合の結果は次のとおりです。

{"event":"signup","user":7}

入れ子の文字列も戻す をオフにすると、1層だけ解除したところで止まり、まだエスケープされたままの内側の文字列が表示されます。

"{\"event\":\"signup\",\"user\":7}"

各層に何が入っていたかを正確に確かめたいときに便利です。

エラーメッセージ

入力が正しい JSON 文字列でない場合は、問題のある行と列が表示されます。実際の例です。

入力 メッセージ
"bad \q escape" 1行目、6列目:無効なエスケープシーケンス \q です
He said "hi" 1行目、9列目:\" とエスケープされていないダブルクォートがあります
"unterminated 1行目、1列目:文字列が閉じていません。閉じるダブルクォートがありません

JSON で使えるエスケープは \"、\\、\/、\b、\f、\n、\r、\t、そして \u の後に16進数4桁が続くものだけです。\x41 や \' のようなほかの言語のエスケープは、JSON では無効です。入力欄で表示 を押すと、問題の箇所へ移動します。

仕組み

このツールは入力を JSON の文字列リテラルとして読み込みます。外側のクォートがなければ補います。エスケープは JSON のルールに従ってデコードします。結果がダブルクォートで始まり、それ自体が正しい JSON 文字列で、入れ子の文字列も戻す がオンなら、もう一度デコードします。最後に、結果が JSON のオブジェクトか配列であれば、選んだインデントで整形します。中の数値は書いたとおりに保たれます。処理はすべてブラウザ内で行われます。

ヒント

  • 結果が正しい JSON でない場合は、プレーンテキストとして表示されます。もともと JSON ではなかった文字列なら、それが正しい結果です。
  • ログの行から値をコピーするときはクォートも含めてコピーすると、両端の文字を取りこぼさずに済みます。
  • 出力に余分な \r が残る場合、元のテキストが Windows の改行コードだったということです。

ほかの方法

JavaScript:JSON.parse(str) で1層分をデコードできます。二重にエンコードされた値なら結果に対してもう一度呼び出し、JSON.stringify(value, null, 2) で整形します。

Python:json.loads(s) で JSON 文字列をデコードできます。二重にエンコードされた文字列なら2回呼び出します。

jq:jq -r . file.json は JSON 文字列を生のテキストとして出力し、jq 'fromjson' は JSON を含む文字列を解析します。

関連ツール

逆にテキストを JSON 文字列にエスケープするには、JSON文字列化ツール を使ってください。結果を検証したり整形し直したりするには JSON整形ツール を、YAML に変換するには JSON YAML 変換ツール をお使いください。

JSONアンエスケープのよくある質問

外側のクォートも含めて貼り付ける必要がありますか?

いいえ。前後のダブルクォートがあってもなくても受け付けます。ログやフィールドから文字列の中身だけをコピーした場合も、そのまま貼り付けてください。

二重にエンコードされた JSON 文字列とは何ですか?

2回文字列化された JSON のことで、\\\" のような並びだらけになります。すでに文字列になっているデータを、サービスがさらに文字列化したときによく起こります。「入れ子の文字列も戻す」をオンにすると、本来の中身にたどり着くまでエスケープの解除を繰り返します。

エスケープされていないダブルクォートについてのエラーが出るのはなぜですか?

JSON の文字列の中では、ダブルクォートはすべて \" と書く必要があります。そうなっていないと、文字列がそこで終わったと見なされ、残りを読み込めません。メッセージにはそのクォートの列番号が表示されます。

データはどこかに送信されますか?

いいえ。エスケープの解除はブラウザ内で行われるので、個人情報を含むログの行やペイロードも端末の外に出ません。

その他のコード・データツール

すべてのツールを見る