JSONを整形・検証・圧縮する方法
- 上のボックスにJSONを貼り付けます。入力中に自動でチェックされ、ステータス行が緑か赤に変わります。
- フォーマットをクリックすると、スペース2個、スペース4個、タブから選んだインデントで見やすく整形され、圧縮をクリックすると不要なスペースと改行がすべて取り除かれます。オブジェクトのキーを順番にそろえるにはキーをA→Z順に並べ替えにチェックを入れます。
- 結果をコピーするか、
data.jsonとしてダウンロードします。動きを先に見てみたいときは、サンプルを押すと小さな例が入ります。
正しいJSONなら、ステータス行に内容の要約が表示されます。たとえば有効なJSON · キー7個のオブジェクト · 221文字のようになります。この文字数はサンプルをスペース2個で整形したときの値で、同じデータを圧縮すると159文字、スペース4個なら259文字です。整形と圧縮は値と値の間の空白しか変えないので、データ自体は変わりません。
エラーの直し方
JSONが正しくない場合は、ステータス行にパーサーのエラーメッセージと、問題が起きた行と列が表示されます。フォーマットか圧縮をクリックすると、入力ボックスのカーソルもその位置に移動します。メッセージの文面はブラウザーが作るため、Chrome、Firefox、Safariで異なります。よくある原因は次のとおりです。
| 間違い | 例 | 直し方 |
|---|---|---|
| 末尾の余分なカンマ | {"a":1,} | 最後の要素の後のカンマを消す |
| シングルクォート | {'name': 'Alice'} | キーと文字列はダブルクォートで囲む |
| 引用符のないキー | {name: "Alice"} | すべてのキーを"name"のように囲む |
| コメント | {"a": 1 /* note */} | コメントを消す(標準のJSONにコメントはない) |
| カンマの抜け | {"a": 1 "b": 2} | 要素の間にカンマを入れる |
| 閉じていないかっこ | [1, 2, 3 | 閉じる]や}を加える |
| 先頭のゼロ | {"a": 007} | 7と書くか、文字列"007"にする |
| JSONにない値 | NaN、undefined、True、None | null、true、falseを使う |
| 文字列の中の生の改行 | 2行にまたがって入力した文字列 | 改行は\nと書く |
| 複数のドキュメント | {"a":1}の次の行に{"a":2} | カンマで区切って[ ]で囲む |
TrueやNoneが見えたら、json.dumps()で変換せずにそのまま出力したPythonの辞書である可能性が高いです。最後の行は多くのログファイルが使うJSON Lines形式で、1行1行が別々のドキュメントになっています。
正しいJSONの条件
JSONはRFC 8259とECMA-404で定義されています。JSONテキストは1つの値で、{ }で囲んだオブジェクト、[ ]で囲んだ配列、ダブルクォートで囲んだ文字列、数値、またはtrue、false、nullのいずれかです。つまり42や"hello"だけでも正しいJSONです。このバリデーターは標準に厳密に従うので、JSON5や一部のエディターの設定ファイルで使われる「コメント付きJSON」のような緩い形式はエラーになります。
整形で変わることがあるもの
このツールはJSONをいったんJavaScriptの値として読み込み、もう一度書き出すため、その過程でいくつかの点が標準的な形に変わります。
- 数値は最も短い形で書き直されます。
1.0は1、1.50は1.5、1e3は1000になります。9,007,199,254,740,991より大きい整数は精度が落ち、12345678901234567890は12345678901234567000になります。1e400のように表せないほど大きい数はnullになります。 - エスケープは簡略化されます。
"café"は"café"に、\/は/になります。"あ"も"あ"として出力されます。タブなどの制御文字はエスケープされたまま残ります。 - 重複したキーは1つにまとまり、最後の値が残ります。
{"a":1,"b":2,"a":3}は{"a":3,"b":2}になります。 - 整数のように見えるキーは数値順で先頭に移動します。
{"b":1,"2":"two","a":3,"10":"ten"}は{"2":"two","10":"ten","b":1,"a":3}になります。JavaScriptがオブジェクトのプロパティの順序を決める仕組みによるものです。
大きな数値と重複キーの場合を除けば、これらの変化がデータの意味を変えることはありません。標準ではオブジェクトのメンバーに順序はないと定義されており、数値や文字列の2通りの書き方は同じ値を表すからです。IDがそれほど大きいなら、文字列として保存してください。
キーの並べ替え
キーをA→Z順に並べ替えは、すべての階層のすべてのオブジェクトでキーを並べ替えます。配列は要素の順序そのものに意味があるので並べ替えません。キーは文字コードで比べるため、大文字がアンダースコアより、どちらも小文字より前に来ます:Zip、_id、age、name。キーをそろえておくと、2つのAPIレスポンスや設定ファイルをテキスト比較で比べるのがずっと楽になります。
よくある質問
JSONはサーバーに送信されますか?
いいえ。ブラウザーが直接読み込んで整形するので、ここに貼り付けたAPIレスポンスやトークン、顧客データがお使いのパソコンの外に出ることはありません。
壊れたJSONを自動で直してくれますか?
いいえ。推測で直すとデータが知らないうちに変わってしまうおそれがあるため、問題の位置を示すだけにして、修正はご自身で行う仕組みにしています。
スキーマに合っているかも検証しますか?
いいえ。テキストが正しいJSONの構文かどうかだけをチェックし、特定のキーやデータ型があるかどうかは確認しません。
一緒に使うと便利なツールはありますか?
JSONを表計算ソフトで扱いやすい表に変えるにはCSV ⇄ JSON変換を、ログイントークンの中のJSONを読むにはJWTデコーダーを、Base64でエンコードされたデータにはBase64エンコード・デコードを使ってください。