ToolDeck

JSON Schema Validator

JSON データを JSON Schema (Draft 7) に対してブラウザ上で検証

サンプルを試す

JSON データ

JSON Schema

ローカルで実行 · シークレットの貼り付けも安全
ローカルで実行 · シークレットの貼り付けも安全

JSON Schema 検証とは?

JSON Schema 検証とは、JSON ドキュメントが JSON Schema で定義された構造的・値的制約に適合しているかどうかを確認するプロセスです。スキーマ自体も JSON ドキュメントであり、データの期待される形状を記述します。どのプロパティが必須か、どの型でなければならないか、数値の許容範囲、文字列のパターン、配列の長さなどが含まれます。JSON Schema の仕様は json-schema.org で管理されており、一連の IETF ドラフトとして公開されています。Draft 7 と Draft 2020-12 が最も広く採用されています。

単純な JSON 検証が構文のみをチェックする(括弧が対応しているか?文字列はクォートされているか?)のに対し、スキーマ検証はさらに踏み込みます。この API のレスポンスには常に整数の「id」フィールドが含まれているか?「status」フィールドは3つの許可された値のうちの1つか?ネストされたオブジェクトは正しい形状になっているか?このような構造的検証は、構文チェックでは見逃すバグを捕捉します。構文的に有効な JSON でも、アプリケーションにとって意味的に間違っている場合があるためです。

JSON Schema は OpenAPI/Swagger 定義、設定ファイルの検証、フォームバリデーション、データベースのドキュメント制約、自動テストに利用されています。Ajv(JavaScript)、jsonschema(Python)、check-jsonschema(CLI)などのツールが仕様を実装しており、プログラムからデータを検証できます。このオンラインバリデーターでは、スキーマとデータドキュメントの両方を貼り付けて、ライブラリをインストールすることなく即座に適合性を確認できます。

オンライン JSON Schema バリデーターを使う理由

スキーマの作成や検証エラーの手動デバッグは時間がかかります。オンライン JSON Schema バリデーターを使えば、データがスキーマに適合しているかどうかを即座に確認でき、失敗した正確なプロパティを示す明確なエラーメッセージが得られます。

即時の検証フィードバック
スキーマとデータを貼り付けると、リアルタイムで検証結果が表示されます。各エラーには JSON パスと失敗した制約が示されるため、バリデーターライブラリの出力を読み解かなくても問題を修正できます。
🔒
プライバシー優先・ブラウザのみで処理
JSON データはブラウザの外に送信されません。すべての検証はローカルの JavaScript で実行されます。サーバーへの送信なし、ログなし、データ保持なし。内部 API を記述するスキーマや独自のフィールド名を含むスキーマも安心して使用できます。
🎯
Draft 対応の検証
このバリデーターは Draft 7 のスキーマキーワード(type、required、properties、enum、pattern、minimum/maximum、items、anyOf、oneOf、allOf、additionalProperties)を処理します。ビルドパイプラインやテストスイートに組み込む前に、ここでスキーマを確認してください。
📋
アカウント不要・インストール不要
ページを開き、JSON を貼り付けて検証するだけです。npm install も pip パッケージも Docker イメージも不要です。開発ツールをインストールできないマシンで素早くスキーマを確認したいときに便利です。

JSON Schema 検証のユースケース

API コントラクトテスト
OpenAPI 仕様で定義されたスキーマに対して API レスポンスを検証します。フィールドが integer から string に変わるといった破壊的変更を、本番環境に到達する前に検出できます。
設定ファイルの検証
CI/CD パイプライン、Kubernetes マニフェスト、アプリケーション設定用の JSON 設定ファイルが、コミット前に期待されるスキーマと一致しているかを確認します。キーの欠落や誤入力によるデプロイ失敗を防ぎます。
DevOps パイプラインのゲート
コントラクトに違反するペイロードを拒否する CI ステップとしてスキーマ検証を追加します。Terraform の変数ファイル、GitHub Actions の入力、自動化で利用される構造化 JSON に対して有効です。
QA とテストデータのレビュー
テストフィクスチャーとモックデータファイルが、アプリケーションが期待するスキーマに適合しているかを検証します。テストデータのずれは、誤検知の一般的な原因です。
データパイプラインへの取り込み
データパイプラインのエッジで受信 JSON レコードを検証します。スキーマ検証によって不正なイベントがデータウェアハウスに到達する前にフィルタリングされ、後続のクリーンアップコストを削減します。
JSON Schema 構文の学習
スキーマキーワードをインタラクティブに試せます。スキーマを書き、テストデータを貼り付け、どの制約が通過・失敗するかを確認します。ターミナルからスクリプトを実行するよりも高速です。

JSON Schema キーワードリファレンス

JSON Schema はキーワードで構成されており、それぞれが検証対象のデータに対して制約を課します。以下の表は Draft 7 以降でよく使用されるキーワードをまとめたものです。すべてのキーワードは同じスキーマオブジェクト内で組み合わせて使用できます。

キーワード目的使用例
typeRestricts the data type"type": "string"
propertiesDefines expected object keys and their schemas"properties": { "name": { "type": "string" } }
requiredLists mandatory properties"required": ["id", "name"]
itemsSchema for array elements"items": { "type": "number" }
enumRestricts value to a fixed set"enum": ["active", "inactive"]
patternRegex constraint on strings"pattern": "^[A-Z]{2}\\d{4}$"
minimum / maximumNumeric range bounds"minimum": 0, "maximum": 100
minLength / maxLengthString length bounds"minLength": 1, "maxLength": 255
$refReuses another schema by URI"$ref": "#/$defs/address"
additionalPropertiesControls extra keys in objects"additionalProperties": false
anyOf / oneOf / allOfCombines multiple schemas logically"anyOf": [{ "type": "string" }, { "type": "null" }]
if / then / elseConditional schema application"if": { "properties": { "type": { "const": "email" } } }

JSON Schema ドラフト比較:Draft 7 vs 2019-09 vs 2020-12

JSON Schema はいくつかのドラフトバージョンを経ています。Draft 7(2018年公開)はツールサポートが最も広く普及しています。Draft 2019-09 では $defs(definitions の置き換え)、unevaluatedProperties、$recursiveRef が導入されました。Draft 2020-12(最新の安定版)では $recursiveRef が $dynamicRef に置き換えられ、タプル検証のための prefixItems が導入されました。ドラフトを選ぶ際は、使用する検証ライブラリがそのドラフトをサポートしているか確認してください。Ajv は3つのドラフトすべてをサポートしています。Python の jsonschema ライブラリはバージョン 4.0 以降で 2020-12 まで対応しています。

機能Draft 7Draft 2019-09Draft 2020-12
$schema URIdraft-07/schema#2019-09/schema2020-12/schema
if / then / elseYesYesYes
$defs (definitions)definitions$defs$defs
$ref alongside keysNo (sibling ignored)YesYes
$dynamicRefNoNo ($recursiveRef)Yes
prefixItemsNo (use items array)No (use items array)Yes
unevaluatedPropertiesNoYesYes
$vocabularyNoYesYes

コード例

以下の例は、プログラムから JSON をスキーマに対して検証する方法を示しています。各言語のエコシステムで広く使われているライブラリを使用しています。

JavaScript (Ajv)
import Ajv from 'ajv';

const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string', minLength: 1 },
    age: { type: 'integer', minimum: 0 },
    email: { type: 'string', format: 'email' }
  },
  required: ['name', 'email'],
  additionalProperties: false
};

const data = { name: 'Alice', age: 30, email: 'alice@example.com' };

const validate = ajv.compile(schema);
const valid = validate(data);
console.log(valid);          // → true
console.log(validate.errors); // → null

// Invalid data — missing required "email"
validate({ name: 'Bob', age: 25 });
console.log(validate.errors);
// → [{ instancePath: '', keyword: 'required', params: { missingProperty: 'email' } }]
Python (jsonschema)
from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1},
        "age": {"type": "integer", "minimum": 0},
        "tags": {
            "type": "array",
            "items": {"type": "string"},
            "uniqueItems": True
        }
    },
    "required": ["name"]
}

# Valid data
validate(instance={"name": "Alice", "age": 30, "tags": ["admin"]}, schema=schema)
# → No exception raised

# Invalid data — wrong type for "age"
try:
    validate(instance={"name": "Alice", "age": "thirty"}, schema=schema)
except ValidationError as e:
    print(e.message)
    # → 'thirty' is not of type 'integer'
    print(e.json_path)
    # → $.age
Go (santhosh-tekuri/jsonschema)
package main

import (
    "fmt"
    "strings"
    "github.com/santhosh-tekuri/jsonschema/v5"
)

func main() {
    schemaJSON := `{
        "type": "object",
        "properties": {
            "id": { "type": "integer" },
            "status": { "enum": ["active", "inactive"] }
        },
        "required": ["id", "status"]
    }`

    compiler := jsonschema.NewCompiler()
    compiler.AddResource("schema.json", strings.NewReader(schemaJSON))
    schema, _ := compiler.Compile("schema.json")

    // Valid data
    data := map[string]interface{}{"id": 1, "status": "active"}
    err := schema.Validate(data)
    fmt.Println(err) // → <nil>

    // Invalid — missing "status"
    bad := map[string]interface{}{"id": 2}
    err = schema.Validate(bad)
    fmt.Println(err) // → validation failed: missing properties: 'status'
}
CLI (check-jsonschema)
# Install via pip
pip install check-jsonschema

# Validate a file against a schema
check-jsonschema --schemafile schema.json data.json
# → ok -- validation done

# Validate against a remote schema (e.g., GitHub Actions workflow)
check-jsonschema --builtin-schema vendor.github-workflows my-workflow.yml

# Validate multiple files at once
check-jsonschema --schemafile schema.json file1.json file2.json file3.json

よくある質問

JSON 検証と JSON Schema 検証の違いは何ですか?
JSON 検証は文字列が有効な JSON 構文かどうかをチェックします。括弧が正しくネストされているか、キーがクォートされているか、末尾のカンマがないか、などです。JSON Schema 検証はさらに一歩進んで、解析された JSON データが構造的なコントラクトに適合しているかをチェックします。型が正しいか、必須フィールドが存在するか、値が許容範囲内にあるか、といった点を確認します。スキーマを適用する前に有効な JSON が必要ですが、有効な JSON でもスキーマ検証に失敗することがあります。
どの JSON Schema ドラフトを使うべきですか?
Draft 7 が最も安全なデフォルト選択です。複数の言語にわたってライブラリサポートが最も広く、ほとんどのプロジェクトが必要とするキーワード(type、properties、required、enum、pattern、anyOf、oneOf、allOf、$ref)をカバーしています。タプル検証のための prefixItems、拡張可能なスキーマのための $dynamicRef、厳密なオブジェクト形状のための unevaluatedProperties が必要な場合は Draft 2020-12 を使用してください。アップグレード前に、バリデーターライブラリのドキュメントでドラフトのサポートを確認してください。
JSON Schema における $ref はどのように機能しますか?
$ref キーワードを使用すると、スキーマを複製せずに URI で別のスキーマを参照できます。"$ref": "#/$defs/address" という値は、同じドキュメントの $defs セクションで定義されたスキーマを指します。"$ref": "https://example.com/schemas/address.json" のように外部ファイルを参照することも可能です。Draft 7 では、$ref は同じオブジェクト内のすべての兄弟キーワードを置き換えます。Draft 2019-09 以降では、兄弟キーワードが $ref と並行して適用されます。
anyOf、oneOf、allOf の違いは何ですか?
jsonSchemaValidatorContent.a4
JSON Schema はネストされたオブジェクトや配列を検証できますか?
できます。ネストされたオブジェクトのキーに対してスキーマを定義するには properties キーワードを使用し、すべての配列要素が一致しなければならないスキーマを定義するには items キーワードを使用します。これらは任意の深さでネストできます。各位置に異なるスキーマを持つ配列(タプル)の場合は、Draft 2020-12 の prefixItems、または Draft 7 の items の配列形式を使用します。
このツールに貼り付けたデータはサーバーに送信されますか?
送信されません。バリデーターは JavaScript を使用してブラウザ上で完全に動作します。JSON データとスキーマはいかなるサーバーにも送信されません。ツールを使用している間にブラウザのネットワークインスペクターを開いて確認できます。
CI/CD パイプラインで JSON Schema 検証を行うにはどうすればよいですか?
check-jsonschema(Python/pip)または ajv-cli(Node.js/npm)のような CLI バリデーターを使用してください。どちらもスキーマファイルと1つ以上のデータファイルを引数として受け取ります。CI 設定に検証コマンドをステップとして追加してください。検証が失敗するとプロセスがゼロ以外のコードで終了し、パイプラインがブロックされます。GitHub Actions では check-jsonschema アクションを直接使用することもできます。