JSONのフォーマットとバリデーション:開発者向けクイックリファレンス
JSONのフォーマット、バリデーション、そして理解をプロレベルで習得。構文ルール、よくあるエラー、JSONPath、そしてJSONデータを扱うための実用的なツールを解説します。
JSON(JavaScript Object Notation)はWeb APIの共通言語です。シンプルな設計が特徴ですが、カンマひとつの欠落や括弧のミスマッチだけで、アプリケーションが気づかないうちに壊れることがあります。JSONを自信を持って扱うために必要なことをすべてまとめました。
JSONの構文を90秒で理解する
JSONには正確に6種類の値の型があります:
{
"string": "hello world",
"number": 42,
"boolean": true,
"null_value": null,
"array": [1, 2, 3],
"object": { "nested": "value" }
}
よくつまずくルール:
- キーは必ずダブルクォートの文字列にする —
{name: "Alice"}は有効なJSONではない - 末尾のカンマは不可 —
[1, 2, 3,]は無効 - コメントは不可 — JSONには
//や/* */の構文がない - 文字列はダブルクォートを使用する — シングルクォートは使用不可
- 数値に先頭のゼロは使用不可 —
007は無効
よくあるJSONのエラー
1. 末尾のカンマ
// Invalid
{ "a": 1, "b": 2, }
// Valid
{ "a": 1, "b": 2 }
2. シングルクォートの文字列
// Invalid
{ 'name': 'Alice' }
// Valid
{ "name": "Alice" }
3. クォートなしのキー
// Invalid
{ name: "Alice" }
// Valid
{ "name": "Alice" }
4. undefined や NaN の値 — これらのJavaScript固有の値はJSONには存在しません。代わりに null を使用してください。
フォーマットとミニファイ
プリティプリントJSON(フォーマット済み)は読みやすさのためにインデントと改行を使用します:
{
"user": {
"id": 1,
"name": "Alice"
}
}
ミニファイされたJSONはすべての空白を取り除きます:
{"user":{"id":1,"name":"Alice"}}
設定ファイルやソースコードにはフォーマット済みJSONを使用してください。APIレスポンスやストレージではペイロードサイズを削減するためにミニファイされたJSONを使用してください。JSON Formatterを使えばワンクリックで両方を切り替えられます。
JSON Schemaバリデーション
JSON SchemaはJSONドキュメントの期待する構造を定義し、それに対してデータを検証するための仕組みです。APIの契約や設定ファイルのバリデーションに不可欠です。
シンプルなスキーマの例:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["name", "age"],
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
}
}
このスキーマは name または age が欠けているオブジェクト、もしくは age が負の値であるオブジェクトを拒否します。JSON Schema Validatorを使えば、スキーマとデータを貼り付けてリアルタイムで検証できます。
JSONからTypeScriptの型を生成する
APIからJSONレスポンスを受け取り、TypeScriptのインターフェースが必要な場合は、JSONをJSON to TypeScriptコンバーターに貼り付けてください。データ構造から型を推論します:
入力:
{ "id": 1, "name": "Alice", "active": true, "tags": ["admin"] }
出力:
interface Root {
id: number;
name: string;
active: boolean;
tags: string[];
}
JSONPath:ネストされたデータのクエリ
JSONPathはJSONにとってのXPathであり、ネストされた構造から値を抽出するためのクエリ言語です。基本的な構文:
| 式 | 意味 |
|---|---|
$.store.book |
store 内の book キー |
$.store.book[0] |
最初の book |
$.store.book[*].title |
すべての book のタイトル |
$..price |
ドキュメント内のすべての price の値 |
JSON Path Finderを使えば、レンダリングされたJSONツリーの任意の値をクリックすることで、パスが自動的にコピーされます。
2つのJSONオブジェクトを比較する
APIの変更や設定のズレをデバッグする際は、2つのJSONオブジェクト間で何が変わったかを確認する必要があります。JSON Diff Viewerは追加・削除・変更されたフィールドを並べてハイライト表示します。
JSONをZodスキーマに変換する
TypeScriptでランタイムバリデーションにZodを使用している場合、JSON to ZodツールはサンプルJSONをすぐに使えるZodスキーマに変換します。メール、URL、datetimeフィールドに対してスマートな型推論も行います。
まとめ
JSONはシンプルですが厳格です。パースする前には必ずバリデーションを行い、コンパイル時に構造のミスマッチを検出するためにTypeScriptインターフェースを活用し、APIレスポンスのデバッグのためにフォーマッターを手元に置いておきましょう。これらの習慣により、ランタイムバグのカテゴリ全体を防ぐことができます。