JSONはAPI・設定ファイル・データベースなど、あらゆる場面で使われています。しかし、圧縮されたJSONは読みにくく、デバッグが困難です。このガイドではJSONの整形とは何か、なぜ重要なのか、そして効率的に行う方法を説明します。
JSONの整形とは
整形(プリティプリント)とは、適切なインデントと改行を加えて構造を読みやすくすることです。比較してみましょう:
圧縮状態:
{"name":"Alice","age":30,"skills":["js","python"]}
整形後:
{
"name": "Alice",
"age": 30,
"skills": [
"js",
"python"
]
}
同じデータでも、可読性が大幅に変わります。
JSONの構文ルール
整形の前に、JSONが有効である必要があります。主なルール:
- 文字列はダブルクォートを使う —
"key"であり'key'は不可 - キーは必ず文字列(クォート必須)
- 末尾カンマは不可:
[1, 2, 3,]は無効 - コメントは標準JSONでは不可
- 値として使えるもの:文字列、数値、オブジェクト、配列、
true、false、null
よくあるJSONエラー
| エラー | 例 | 対処法 |
|---|---|---|
| 末尾カンマ | {"a":1,} | カンマを削除 |
| シングルクォート | {'a':'b'} | ダブルクォートに変更 |
| キーの未クォート | {a: 1} | キーをクォートで囲む |
| undefinedの値 | {"x": undefined} | nullに変更 |
| コメント | // comment | 削除(JSONでは無効) |
オンラインでJSONを整形する
最も手軽な方法は、ブラウザ上のツールを使うことです。インストール不要で、IDEに貼り付ける手間もありません。
リアルタイムで整形し、構文エラーをその場でハイライト表示し、ワンクリックでコピーできます。
良いJSONフォーマッターの条件
- リアルタイム検証 — 入力しながらエラーを検出
- シンタックスハイライト — ネスト構造が一目でわかる
- エラーメッセージ — どこでパースが失敗したか明示
- コピーボタン — ワンクリックでクリップボードへ
コードでJSONを整形する
JavaScript / Node.js
const ugly = '{"name":"Alice","age":30}';
const pretty = JSON.stringify(JSON.parse(ugly), null, 2);
console.log(pretty);
JSON.stringify(value, replacer, space) の第3引数でインデント幅を指定します。
Python
import json
ugly = '{"name": "Alice", "age": 30}'
pretty = json.dumps(json.loads(ugly), indent=2)
print(pretty)
コマンドライン(jq)
echo '{"name":"Alice"}' | jq .
# ファイルを整形する場合:
cat data.json | jq .
jqはJSONを扱うための標準Unixツールです。brew install jqまたはapt install jqでインストールできます。
JSONの圧縮(ミニファイ)
整形の逆操作:すべての空白を削除してファイルサイズを削減します。データ送信前の最適化に有効です。
// JavaScript
const minified = JSON.stringify(JSON.parse(pretty));
ZeroTool JSON フォーマッターでは圧縮も対応しています。整形済みのJSONを貼り付けてMinifyをクリックするだけです。
JSONスキーマ検証
整形は構文チェックのみです。データの構造(必須フィールド、型、パターン)を検証したい場合はJSONスキーマを使います:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["name", "age"],
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
}
}
プログラムからの検証には、ajv(Node.js)やjsonschema(Python)が利用できます。
大きなJSONを扱うコツ
- セクションの折りたたみ — 優れたフォーマッターはオブジェクト・配列ノードを折りたためる
- キーで検索 — スクロールより速い
- 配列のページネーション — 数千件の配列は表示行のみレンダリング
- ストリーミングパーサー — 50MB超のファイルには
oboe.js(JS)やijson(Python)を使ってメモリに全ロードせず処理
まとめ
| タスク | ツール |
|---|---|
| 素早く整形・検証 | ZeroTool JSON フォーマッター |
| CLIで整形 | jq . |
| JavaScript | JSON.stringify(obj, null, 2) |
| Python | json.dumps(obj, indent=2) |
| スキーマ検証 | ajv、jsonschema |
整形されたJSONはデバッグが速く、diffで読みやすく、エラーが隠れにくくなります。常にフォーマッターを使う習慣をつけましょう。