Skip to content

JSON Schema バリデーター

JSON を任意の JSON Schema に対してブラウザで即座に検証。Draft 2020-12 / 2019-09 / Draft-07 をサポートし、エラーメッセージは JSON Pointer パスで正確に位置を示します。100% プライベート、アップロード不要、無料。

トラッキングなし ブラウザで動作 無料
JSON データと schema の両方を貼り付けてください
Draft 2020-12、2019-09、Draft-07 への準拠を、型強制エッジケース、format 語彙、$ref 解決、JSON Pointer エラーパスを含めてレビュー済みです。 — Go Tools API ツーリングチーム · May 7, 2026

JSON Schema バリデーターとは?

JSON Schema バリデーターは、データドキュメントと schema ドキュメントの 2 つの JSON を受け取り、データが schema の契約に従っているかを報告するプログラムです。Schema は固定語彙(type、properties、required、items、enum、oneOf、allOf、$ref、format)を使って、フィールド型、必須キー、値の範囲、許容 enum 値、正規表現 pattern、構造ルールを宣言します。バリデーターは両ドキュメントを並行して走査し、0 個以上のエラーを返します。各エラーはデータ内部の JSON Pointer パスにピン留めされます。

検証は実行時に、信頼できない入力とコードの境界で実行されます。TypeScript の型はコンパイル時に消えるため、webhook、サードパーティ API、ユーザーの貼り付けから来る JSON には無力です。そのギャップを埋めるのが JSON Schema です。TypeScript(または Python の Pydantic)と組み合わせれば、コードベース内部のコンパイル時保証と境界での実行時保証の両方を得られます。

Draft 2020-12 が現行仕様で、2026 年の新規プロジェクトはこれを選ぶべきです。古い Draft(2019-09、Draft-07、Draft-06、Draft-04)はレガシーコードに残り続けています。Draft-07 は Helm chart、VS Code 設定、古い Ajv 設定で今も一般的です。OpenAPI 3.1 はネイティブで Draft 2020-12 を、OpenAPI 3.0 は Draft 4 のサブセットを使います。

このツールは完全にブラウザ内で動作します。JSON、schema、検証出力はマシンを離れず、社内 API 契約や機微な payload にも安心です。内部 $ref ポインターは自動解決され、外部 HTTP ref はプライバシー保護のため意図的に無効化されています。

隣接する JSON ツールと併用する場合:貼り付け前に JSON フォーマッター で整形し、JSON Diff で 2 つの JSON を比較し、JSON → YAMLYAML → JSON で形式を変換できます。Node・Python・ブラウザの一連の検証例は JSON Schema 検証ガイド をご覧ください。

// A 5-line schema that catches three real bugs
const schema = {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id":    { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "age":   { "type": "integer", "minimum": 0, "maximum": 150 }
  },
  "required": ["id", "email"],
  "additionalProperties": false
};

// Three bugs the schema catches:
const bad = { "id": "42", "age": 200 };
//   /id   → type: expected integer, got string
//   /email → required: missing
//   /age   → maximum: 200 > 150

// In Node:        new Ajv().compile(schema)(bad)  // false; ajv.errors has the paths
// In Python:      jsonschema.validate(bad, schema)
// In the browser: this tool — same errors, same paths, no install

主な機能

マルチ Draft 対応

Draft 2020-12(デフォルト)、2019-09、Draft-07 に対応。Schema の $schema URI から Draft を自動判別し、未指定時はフォールバック用セレクターを使用します。

パス精密なエラー

全エラーに JSON Pointer(例:/user/email/0)、失敗 keyword(type、required、pattern)、1 行の説明が付きます。クリックで該当箇所へジャンプできます。

ライブ検証

入力中に検証します。エラーがリアルタイムで更新され、Validate ボタンを往復することなく schema やデータを反復調整できます。

format keyword 完備

email、uri、uuid、date、date-time、ipv4、ipv6、hostname、regex — 実運用で使う format を、実戦投入された pattern で検証します。

100% ブラウザ動作

入力はマシンを離れません。アップロードなし、貼り付け内容の解析なし、JSON の localStorage 保存なし。社内契約や機微 payload に安全です。

サンプル schema をワンクリック

プリセット(サインアップフォーム、Webhook エンベロープ、設定ファイル、注文配列)を読み込めば、5 秒以内に動作する検証状態に到達できます。

有効なオブジェクト — required + 型チェック

{
  "id": 42,
  "email": "alice@example.com",
  "age": 30
}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 }
  },
  "required": ["id", "email"],
  "additionalProperties": false
}

Schema は id と email を required に指定し、型を固定しています。上のデータはすべての制約を満たすため検証を通過します。email を消したり id を文字列に変えたりすると、パス付きのエラーが確認できます。

無効 — required 欠落 + 型違反

{
  "id": "42",
  "age": 200
}
{
  "type": "object",
  "properties": {
    "id": { "type": "integer" },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "maximum": 150 }
  },
  "required": ["id", "email"]
}

エラーは 3 件:/id は string で integer ではない、/email が欠落、/age(200)が maximum 150 を超過。各エラーには正確な JSON Pointer パスが付くため、推測なしでデータを修正、または schema を緩める判断ができます。

判別ユニオン — oneOf と const

{
  "type": "order.created",
  "data": { "orderId": "ORD-001234", "totalUsd": 49.99 }
}
{
  "oneOf": [
    {
      "properties": {
        "type": { "const": "order.created" },
        "data": {
          "type": "object",
          "properties": {
            "orderId": { "type": "string", "pattern": "^ORD-[0-9]{6}$" },
            "totalUsd": { "type": "number", "minimum": 0 }
          },
          "required": ["orderId", "totalUsd"]
        }
      },
      "required": ["type", "data"]
    },
    {
      "properties": {
        "type": { "const": "order.refunded" },
        "data": { "type": "object", "required": ["refundId"] }
      },
      "required": ["type", "data"]
    }
  ]
}

Webhook エンベロープの検証例です。type が "order.created" のため最初の oneOf ブランチに一致します。type を "order.refunded" に変えたり orderId の pattern を崩すと、oneOf がブランチごとに失敗を報告する様子を確認できます。

オブジェクトの配列 — items + uniqueItems

[
  { "sku": "A1", "qty": 3 },
  { "sku": "B2", "qty": 5 },
  { "sku": "A1", "qty": 3 }
]
{
  "type": "array",
  "minItems": 1,
  "uniqueItems": true,
  "items": {
    "type": "object",
    "properties": {
      "sku": { "type": "string", "pattern": "^[A-Z][0-9]+$" },
      "qty": { "type": "integer", "minimum": 1 }
    },
    "required": ["sku", "qty"]
  }
}

2 件のアイテムがバイト一致のため uniqueItems が発火します。インデックス 0 と 2 が重複し、バリデーターは配列ルートで重複を報告します。カートの行重複やマージバグによる発送リクエストの検出に有効です。

使い方

  1. 1

    JSON Schema を貼り付ける

    Schema を右パネルに投入してください。$schema URI があればバリデーターが Draft を自動判別し、なければツールバーで Draft 2020-12 / 2019-09 / Draft-07 を選択します。

  2. 2

    JSON データを貼り付ける

    検証したい JSON ドキュメントを左パネルに投入します。入力中に検証が走り、200 KB を超える大きな入力は手動 Validate ボタンに切り替わって入力がもたつかないようにします。

  3. 3

    エラーリストを読む

    各エラーには JSON Pointer パス、keyword、1 行の説明が含まれます。エラーをクリックして該当箇所へジャンプし、修正するとエラー数がリアルタイムで減少します。

JSON Schema のよくある落とし穴

type: integer と number の違い

JSON Schema は 1.0 を number として扱い integer とは見なしません。契約に integer と書けばバリデーターは 1.0 を拒否します。多くの言語が 1 と等しいと言ってもです。本当に integer が必要でなければ number を選びましょう。

✗ 誤り
{ "qty": 1.0 }   schema: { "type": "integer" }   → error: not an integer
✓ 正しい
{ "qty": 1 }     schema: { "type": "integer" }   → valid

required を誤った入れ子レベルに置く

required は properties と同じ階層に置く必要があり、property 宣言の中ではいけません。property 内の required 配列は黙って無視され、バリデーターは強制しません。

✗ 誤り
{ "properties": { "name": { "type": "string", "required": true } } }
✓ 正しい
{ "properties": { "name": { "type": "string" } }, "required": ["name"] }

additionalProperties の既定値は true

additionalProperties: false がない schema は開放型で、追加キーは何でも通過します。「schema が何でも受け入れる」最も多い原因です。

✗ 誤り
{ "properties": { "id": { "type": "integer" } } }   accepts: { "id": 1, "foo": "bar", "x": null }
✓ 正しい
{ "properties": { "id": { "type": "integer" } }, "additionalProperties": false }

OpenAPI 3.0 nullable と Draft 2020-12 type 配列

OpenAPI 3.0 は nullable: true、Draft 2020-12 は type: ["string", "null"] を使います。混ぜると見た目は正しいのに実際には null を許可しない schema が出来上がります。

✗ 誤り
{ "type": "string", "nullable": true }   in 2020-12: nullable is just an unknown keyword
✓ 正しい
{ "type": ["string", "null"] }   in 2020-12: explicitly allows null

アンカーのない pattern

JSON Schema の正規表現は既定で部分一致です。pattern: "^[A-Z]+$" は文字列全体に固定されますが、pattern: "[A-Z]+" は文字列内のどこかに大文字があれば一致します。

✗ 誤り
pattern: "[A-Z]+"   accepts: "helloX"   (because X matches)
✓ 正しい
pattern: "^[A-Z]+$"   accepts only: "HELLO"

anyOf を意図して oneOf を書いてしまう

oneOf はちょうど 1 つのブランチが一致することを要求します。2 つのブランチが同じ形を受け入れると、anyOf なら通るデータで oneOf は失敗し、メッセージも紛らわしくなります("matches more than one")。

✗ 誤り
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → error: matches both
✓ 正しい
anyOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → valid

主なユースケース

API リクエストの検証
デプロイ前にリクエストボディとエンドポイントの schema を貼り付けて確認しましょう。テストでカバーしきれない 400 レスポンス(必須フィールド欠落、型違反、範囲外の数値)を事前に捕まえられます。
Webhook Payload の検証
ベンダーが送ってきた payload をハンドラーが拒否しますか?実 payload を自分の schema、次にベンダー公開 schema で検証してください。両者の差分がバグの正体です。
設定ファイルの Lint
package.json、tsconfig.json、helm values.yaml — どの設定ファイルにも公開 schema があります。Schema と設定を貼り付ければ、タイプミスを試行錯誤なしに発見できます。
OpenAPI コンポーネントのテスト
OpenAPI 3.1 ドキュメントから schema コンポーネントを取り出して貼り付け、サンプル payload を検証します。Mock サーバーを立てるより速く、決定的で、SDK も不要です。
フォーム送信のプリフライト
フロントエンド検証の実装前にサンプルフォーム payload を貼り付け、想定どおりに拒否し受け入れることを確認したうえで、同じ schema をクライアントとサーバーに展開しましょう。
データパイプライン契約チェック
ETL 出力がドリフトしましたか?サンプル行と下流 schema を貼り付ければ、どの producer が変わり、どのキーが壊れたかを特定できます。10,000 行のリトライを発動させる前に。

技術詳細

Draft 2020-12 準拠
公開された Draft 2020-12 仕様(keyword、型システム、format 語彙)を実装。Ajv 8.x と ajv-formats の出力でクロスチェック済みです。
JSON Pointer エラーパス
エラーは RFC 6901 JSON Pointer(/user/email/0)を使用。各 keyword 失敗はデータ内の解決可能な単一位置を指し、曖昧さや文字列検索は不要です。
内部 $ref の解決
単一ドキュメント内の $ref ポインター(#/$defs/foo、#/properties/bar)を解決します。循環参照は検出して報告。外部 HTTP $ref はプライバシー保護のため無効化されています。

ベストプラクティス

additionalProperties: false を必ず設定
入力契約(リクエストボディ、設定ファイル、キューメッセージ)では、未知のキーは大抵バグです(タイプミス、誤って混入したフィールド、攻撃者の探り)。既定で拒否しましょう。
再利用するサブ schema は $defs に
同じ形を 2 度インラインで書けば、いずれずれていきます。共有定義を $defs に移し、$ref で参照しましょう。単一の真実の源があれば、変更は一度で全所に反映されます。
業務ロジックの前に検証する
JSON.parse 直後、解析済み構造に触れる前に schema 検証を実行してください。型ナローイング、デフォルト値補完、永続化はいずれも契約成立を前提とします。まず成立を保証しましょう。

よくある質問

JSON Schema 検証とは何ですか?
JSON Schema 検証とは、ある JSON ドキュメントが JSON Schema 構文で書かれた契約に一致するかをチェックする処理です。Schema はフィールド型、必須キー、許容値、構造ルールを宣言し、バリデーターは両ドキュメントを並行して走査して、契約に違反したパスを報告します。信頼できない入力(API リクエスト、Webhook、設定ファイル、フォーム payload)とビジネスロジックの境界で動作し、形状エラーが下流コードを汚染する前に止めます。Node、Python、ブラウザの一連のサンプルは JSON Schema 検証完全ガイド をご覧ください。
このバリデーターはどの JSON Schema Draft をサポートしますか?
Draft 2020-12(デフォルト・推奨)、Draft 2019-09、Draft-07 に対応します。Schema の $schema URI から自動的に Draft を判別し、未指定の場合はドロップダウンの選択にフォールバックします。2026 年の新規プロジェクトには Draft 2020-12 を選んでください。OpenAPI 3.1 がネイティブに採用し、Ajv のデフォルトもこれです。Draft-07 は今もレガシーコード(旧 Ajv 設定、Helm chart、VS Code 設定)でよく見かけます。
Schema を使って JSON を検証するにはどうすればいいですか?
JSON データを左パネルに、JSON Schema を右パネルに貼り付けます。入力中にバリデーターが即時実行され、緑のチェックなら有効、赤いリストならエラーです。各エラーには JSON Pointer パス(例:/user/email)、失敗した keyword(type、required、pattern、minimum 等)、人間が読める短いメッセージが含まれます。エラーをクリックすると該当行へジャンプできます。アップロード不要、サインアップ不要です。
JSON Schema 検証と JSON 構文検証の違いは何ですか?
JSON 構文検証は、ドキュメントがパースできるか(カンマ過多やブラケット欠落がないか)だけを確認します。これは JSON フォーマッター の役割です。JSON Schema 検証はパース後に実行され、解析済み構造が契約に一致するか(必須フィールドの存在、型の正しさ、値の範囲など)をチェックします。通常は両方を順に使います。まずフォーマットでパース可能性を確認し、次に schema で意味的検証を行います。
正しく見える JSON が schema に拒否されるのはなぜ?
よくある 5 つの容疑者:(1) additionalProperties: false — schema が宣言していないキーがデータにある(タイプミスや新規フィールドが多い);(2) type: "integer" と "number" — JSON Schema は 1.0 を number として扱い integer ではないとみなす;(3) format keyword(email、uri、uuid)が一見正しく見える壊れた文字列を拒否する;(4) required の入れ子レベルが誤っている — required は properties と同じ階層にあるべき;(5) JSON 側が文字列 "42" で schema は integer 42 を期待している。エラーパスがどれかを正確に示します。
$ref とリモート schema 参照に対応していますか?
内部 $ref ポインター(#/$defs/foo、#/properties/bar)はそのまま動作します。外部 URL を指すリモート $ref は意図的に無効化されています。外部 schema をフェッチすると検証行為が第三者に漏れ、プライバシーモデルが壊れるためです。複数ファイル schema を検証したい場合は、$defs を使って参照定義を 1 ドキュメントにインライン化するか、リモート ref が許される自前の CI 上で Ajv を使ってください。
additionalProperties: false は何をしますか?
additionalProperties: false は properties に宣言されていないキーをすべて拒否します。契約を引き締めるために最も有用な keyword です。これがないと schema は既定で開放されており、誤入力や悪意あるフィールドを黙って受け入れます。入力契約(リクエストボディ、設定ファイル、キューメッセージ)には常に additionalProperties: false を設定し、schema が大きなドキュメントの部分記述である場合のみ true(または省略)を選びます。
Node.js や Python で schema を使って JSON を検証するには?
Node:Ajv をインストールし(npm i ajv ajv-formats)、new Ajv().compile(schema) で validate(data) を呼び出します。Python:jsonschema をインストールし(pip install jsonschema)、jsonschema.validate(data, schema) を呼び出します。TypeScript なら json-schema-to-typescript で schema から型を生成し、コンパイル時とランタイムを同期できます。Node、Python、ブラウザのコピペ可能なレシピは JSON Schema 検証ガイド にあります。
oneOf、anyOf、allOf の違いは何ですか?
allOf — すべてのサブ schema に一致する必要がある(積集合、合成に使う)。anyOf — 少なくとも 1 つに一致する必要がある(和集合、早期成功)。oneOf — ちょうど 1 つに一致する必要がある(判別ユニオン、より厳密だが遅い)。type で識別される webhook イベントには oneOf、寛容な和集合には anyOf、ベース schema に追加制約を重ねるなら allOf を使います。oneOf は全ブランチを試すため最も遅いので、「ちょうど 1 つ」を強制する必要がない場合は anyOf を選びましょう。
OpenAPI スキーマに対応していますか?
OpenAPI 3.1 はネイティブで Draft 2020-12 を使うため、OpenAPI 3.1 の schema コンポーネントはそのまま貼り付けられます。OpenAPI 3.0 は Draft 4 のサブセットでほぼ互換ですが、nullable: true(3.0 構文)まわりでつまずく可能性があります。Draft 2020-12 では type: ["string", "null"] と書きます。完全な OpenAPI ドキュメント(paths、operations、security)の検証には Spectral などの専用 OpenAPI lint を使ってください。本ツールは schema 部分に特化しています。
バリデーターが「JSON Schema 自体が無効」と言うのはなぜ?
JSON Schema は、まず有効な JSON ドキュメントである必要があります。よくある原因:properties オブジェクトの末尾カンマ、ダブルクォートではなくシングルクォート、$schema が存在しない Draft URL を指している、required を配列ではなく文字列で書いている、など。JSON フォーマッター でまず構文の問題を炙り出してから、ここに貼り戻して意味的検証を行ってください。
ツールは私の JSON や schema をサーバーに送信しますか?
送信しません。すべてのパースと検証はブラウザのローカルで実行されます。JSON、schema、検証結果はマシンを離れません。アップロードなし、入力の localStorage 保存なし、貼り付けた内容に対する解析もありません。社内 API 契約、内部設定ファイル、機微な payload にも安心して使えます。リフレッシュ後も維持されるよう、選択した Draft のみが localStorage に保存されます。ブラウザデータを消去すれば消えます。
JSON Lines(NDJSON)や複数ドキュメントを検証できますか?
本ツールは 1 回につき 1 ドキュメントを検証します。JSON Lines は行ごとに検証するか、Node で Ajv と JSONStream のようなストリームパーサーを併用してください。大規模データセットのバッチ検証には CLI が最適です。ajv-cli や check-jsonschema(Python)は schema を 1 回コンパイルするだけで毎秒数千ファイルを処理できます。

Base64エンコーダー&デコーダー

エンコーディングとフォーマット

Base64のデコード・エンコードが無料でオンラインで行えます。リアルタイム変換、UTF-8・絵文字対応。100%ブラウザ上で動作しデータは外部に送信されません。登録不要。

JSON Diff(差分)

エンコーディングとフォーマット

2つのJSONファイルをブラウザで即座に比較・差分確認。サイドバイサイドのハイライト表示、RFC 6902 JSON Patch出力、タイムスタンプやIDなどのノイズフィールドを無視。100%プライベート、アップロード不要。

JSONフォーマッター&バリデーター

エンコーディングとフォーマット

無料オンラインJSON整形ツール。ブラウザ上でJSONのフォーマット、構文検証、圧縮を即座に実行。エラー検出、ワンクリックコピー対応。データは端末外に送信されず、100%プライバシー保護。

JSON to YAML コンバーター

エンコーディングとフォーマット

JSONを貼り付けるだけで即座にYAMLを取得。ブラウザ内でリアルタイム変換。K8s・Compose対応、2/4スペースインデント、Norway問題対応自動クォート。100%プライベート、データは送信されません。

QRコード生成 — URL / WiFi / vCard / Email / SMS / 位置

エンコーディングとフォーマット

無料のQRコードジェネレーター。URL・WiFi・vCard・メール・SMS・位置情報など7種類に対応した静的QRを生成。期限切れなし、登録不要、100%ブラウザで完結し、アップロード一切なし。SVGとPNGで保存できます。

URLエンコーダー&デコーダー — URL構造パーサー内蔵

エンコーディングとフォーマット

URLを貼り付けるだけで即座にエンコード・デコード。内蔵URLパーサーがプロトコル・ホスト・パス・クエリパラメータを編集可能なフィールドに分解。encodeURIとencodeURIComponentの2モード対応。完全ブラウザ動作でデータ送信なし。