Developer

JSONのフォーマットとバリデーション:開発者向けクイックリファレンス

JSONのフォーマット、バリデーション、そして理解をプロレベルで習得。構文ルール、よくあるエラー、JSONPath、そしてJSONデータを扱うための実用的なツールを解説します。

7分で読めます

Code on screen

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. undefinedNaN の値 — これらの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レスポンスのデバッグのためにフォーマッターを手元に置いておきましょう。これらの習慣により、ランタイムバグのカテゴリ全体を防ぐことができます。