新着記事を見逃さないには?
このブログ一覧をブックマークし、ホームやツール一覧のガイド欄もご覧ください。記事の閲覧に登録やメール購読は不要です。
JSONの構文検証、Lintルール、JSON Schemaによるデータ契約の違いを、同じAPIデータを使って比較し、正しい組み合わせ方を解説します。
JSONを解析できてもAPIに拒否されることがあります。Validatorが有効と判定しても、Linterが警告を出すこともあります。矛盾ではありません。3つの道具は別の質問に答えています。
JSON Validatorはテキストが正しいJSONか、JSON Linterは品質や一貫性のルールを満たすか、JSON Schemaはデータがどの構造と制約を満たすべきかを扱います。
| ツール | 中心となる質問 | 主な結果 |
|---|---|---|
| JSON Validator | このテキストは正しいJSONか? | 成功、または構文エラー位置 |
| JSON Linter | 品質・命名・チーム規約に合うか? | 警告や改善提案 |
| JSON Schema | アプリが受け入れるデータ構造は? | 機械可読なデータ契約 |
> 実用的な順番は、構文検証 → Lint → Schema検証です。
JSON Validatorという名称は、しばしば2種類のツールに使われます。
JSON.parseなどでJSONテキストの文法を確認します。Json WorkのJSON Validatorは主に前者です。JSON Schema公式資料のValidatorは通常、後者を意味します。設計書では syntax validator と schema validator を明記すると誤解を防げます。
nullなどのJSON文法を定義しています。次の例はカンマがないため無効です。{
"id": 101
"name": "Alice"
}構文Validatorは、カンマ不足、引用符や括弧の閉じ忘れ、不正なエスケープ、引用符のないキー、undefinedやNaNといった非対応値を検出します。
一方、次は構文上は有効です。
{
"id": "one hundred",
"email": "not-an-email",
"active": "yes"
}構文Validatorは、idが整数であるべきか、activeがbooleanであるべきかを知りません。「正しいJSONテキストか」だけを判定します。エラー位置はJSON Validatorで確認し、JSONに近い壊れた入力はJSON Repairで候補を作ってから内容をレビューしてください。
Lintはルールベースの静的分析です。JSON文法とは違い、すべてのLinterに共通する唯一のルール集があるわけではありません。ツールやチームが保守性とリスクに応じてルールを選びます。
{
"user_id": 101,
"userName": "Alice",
"isActive": "true"
}このJSONは有効ですが、Linterは snake_case と camelCase の混在、booleanらしい値が文字列であること、同一フィールドの型の揺れ、過度なネストなどを指摘できます。
ただし警告は必ずしも誤りではありません。上流仕様が文字列 "true" を要求している可能性もあります。JSON Linterは暗黙の規約を見える化しますが、契約なしに業務上の正解を証明するものではありません。
JSON Schemaは、型、必須プロパティ、配列要素、長さ、数値範囲、enum、組み合わせ条件などを表現する標準化された語彙です。公式サイトでは検証、相互運用、ドキュメント化が主要用途として紹介されています。
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": { "type": "integer" },
"name": { "type": "string", "minLength": 1 },
"email": { "type": "string", "format": "email" },
"active": { "type": "boolean" }
},
"required": ["id", "name", "email"],
"additionalProperties": false
}Schemaはルール文書であり、実行プログラムではありません。AjvやPython jsonschemaなどのSchema Validatorが実データに適用します。公式チュートリアルもSchemaとInstanceを区別しています。実装設定にも注意が必要です。formatはValidatorと設定によって、強制条件ではなく注釈として扱われる場合があります。formatの公式解説を確認し、Draft、Validator、オプションをチームで固定してください。
{
"id": "101",
"name": "Alice",
"email": "alice@example.com",
"active": "true"
}idとactiveの型が不自然に見えますが、意図は断定できません。id はinteger、activeはbooleanです。構文が有効 ≠ スタイルが一貫 ≠ データ契約に適合
| 機能 | Validator | Linter | JSON Schema |
|---|---|---|---|
| JSON構文 | 検証する | 通常は有効な構文が前提 | Schema自体も正しいJSONが必要 |
| フィールド型 | 検証しない | 疑わしい型を指摘可能 | 正式に制約できる |
| 必須項目 | 検証しない | 契約なしでは判断困難 | 定義できる |
| 命名規約 | 対象外 | 対象 | 主目的ではない |
| API契約 | 単独では不足 | 単独では不足 | 適している |
「終了時刻は開始時刻より後」「このユーザーに閲覧権限がある」など、Schemaだけでは扱いにくいルールもあります。Schema成功を業務処理の安全性と同一視しないでください。
import Ajv from "ajv";
const schema = {
type: "object",
properties: {
id: { type: "integer" },
name: { type: "string" },
active: { type: "boolean" }
},
required: ["id", "name"],
additionalProperties: false
};
const data = { id: "101", name: "Alice", active: true };
const ajv = new Ajv({ allErrors: true });
const validate = ajv.compile(schema);
if (!validate(data)) console.log(validate.errors);Ajvは id がintegerでないことを報告します。公式ガイドは、Schemaを一度コンパイルして検証関数を再利用する方法を推奨しています。入力がネットワークの生テキストなら、Schema検証より前にJSON解析が必要です。
Validatorは正しい構文、Linterは品質と一貫性、JSON Schemaは構造とデータ契約を守ります。1つを選ぶのではなく順番に組み合わせるのが信頼できる方法です。
JSON Validatorで構文を確認し、JSON Linterで品質を点検し、JSON Schema生成ツールで保守可能な契約を作成できます。すべてブラウザ内で処理されます。開発者に最高のJSON処理ツールを提供することに専念
さらに多くの投稿が近日公開予定...
ブログに戻る更新の追い方、扱うトピック、リクエストについて。
このブログ一覧をブックマークし、ホームやツール一覧のガイド欄もご覧ください。記事の閲覧に登録やメール購読は不要です。
JSON の検証・整形・変換・デバッグの流れと JSON Work の更新で、サイト上の無料ツールがブラウザ内でできることと対応づけています。
はい。About の連絡先や GitHub からどうぞ。実務の統合やデバッグに直結するテーマを優先しています。