JSON のバリデーションとは、文字列が構文的に正しい(JSON 文法に従う)こと、加えてオプションで構造的に正しい(アプリが期待する形と一致する)ことを確認することです。本ガイドでは JavaScript、Python、コマンドライン、ブラウザで JSON を検証する方法を示し、構文バリデーションとスキーマバリデーションの決定的な違いを説明します。
JSON バリデーションの 2 種類
何かを検証する前に、自分が本当に問うているのはどちらかを決めましょう:
- 構文バリデーション —— 「これは妥当な JSON か?」JSON 文法に対してクォート、カンマ、括弧、値型をチェックします。
JSON.parse()がこれを行います。 - スキーマバリデーション —— 「この JSON は正しいフィールド、型、制約を持つか?」
idが整数か、emailが存在するかなどをチェック。これには JSON Schema と Ajv のようなバリデータが必要です。
「validate JSON」という検索の多くは構文バリデーションを指します —— そ こから始めましょう。
JavaScript で JSON を検証
最もシンプルで信頼できる構文チェックは、パースを試して例外を捕捉することです。JSON.parse() は無効な入力に対して SyntaxError を投げます:
function isValidJson(text) {
try {
JSON.parse(text);
return true;
} catch {
return false;
}
}
isValidJson('{"name":"Ada"}'); // true
isValidJson("{'name':'Ada'}"); // false —— シングルクォート
isValidJson('{"a":1,}'); // false —— 末尾カンマ無効な理由が必要なら、エラーメッセージを保持してください —— 通常は位置情報を含みます:
function validateJson(text) {
try {
return { valid: true, value: JSON.parse(text) };
} catch (err) {
return { valid: false, error: err.message };
}
}
validateJson('{"a":1,}');
// { valid: false, error: "Expected double-quoted property name in JSON at position 7" }JSON を正規表現で検証してはいけません。JSON は再帰的な文法で、正規表現では正しく検証できません —— JSON.parse() が公式のバリデータで、すべての JavaScript ランタイムに組み込まれています。
Python で JSON を検証
Python の json.loads() は無効な入力に対して json.JSONDecodeError を投げ、正確な行・列を返します:
import json
def is_valid_json(text):
try:
json.loads(text)
return True
except json.JSONDecodeError as e:
print(f"Invalid JSON: {e.msg} at line {e.lineno} column {e.colno}")
return False
is_valid_json('{"name": "Ada"}') # True
is_valid_json('{"name": "Ada",}') # False —— 末尾カンマコマンドラインで JSON ファイルを検証
jq で
jq は入力が妥当な JSON でないと非ゼロで終了するので、スクリプトや CI に最適です:
# 妥当なら何も出力せず 0;無効なら出力して非ゼロ
jq empty data.json && echo "valid" || echo "invalid"Python で(インストール不要)
python3 -m json.tool data.json > /dev/null && echo "valid"CI パイプラインで
リポジトリ内のすべての JSON ファイルを pre-commit や CI ステップで検証し、不正な設定が本番に届かないようにします:
# 妥当でない .json があればビルドを失敗
find . -name '*.json' -not -path './node_modules/*' \
-exec sh -c 'jq empty "$1" || exit 255' _ {} \;ブラウザで JSON を検証
コードなしで素早く確認したいなら、JSON を fixjson の JSON バリデータ に貼ってください。入力に応じて構文エラーの正確な行と位置を即座に報告し、すべてローカルで動作します —— サーバへ送信されないので、機密ペイロードでも安全です。JSON が壊れていて修復したいなら、JSON Fix が一般的なエラーを自動修正します。
構文を超えて:JSON Schema で構造を検証
構文的に妥当な JSON でもアプリにとっては間違い であり得ます —— 必須フィールドの欠落、数値であるべき場所が文字列、範囲外の値など。構造を強制するには JSON Schema で期待する形を記述し、Ajv(JavaScript)または jsonschema ライブラリ(Python)で検証します:
import Ajv from 'ajv';
const ajv = new Ajv();
const validate = ajv.compile({
type: 'object',
required: ['id', 'email'],
properties: {
id: { type: 'integer' },
email: { type: 'string' },
},
});
validate({ id: 42, email: 'a@b.com' }); // true
validate({ id: '42' }); // false —— 型エラー & email 欠落
// validate.errors に詳細コマンドラインでのスキーマ検証
CI で JSON をスキーマに対して検証する場合、2 つの CLI で多くの用途をカバーできます:
# Python —— 一度だけインストール
pip install jsonschema
jsonschema --instance data.json schema.json && echo OK
# Node —— Ajv の CLI
npm i -g ajv-cli ajv-formats
ajv validate -c ajv-formats -s schema.json -d "data.*.json"コミットごとに JSON を検証(pre-commit フック)
未検証の JSON のコミットを根本から防ぐには、husky + lint-staged でフックを設定:
// package.json
{
"lint-staged": {
"*.json": [
"jq empty",
"ajv validate -s schemas/$name.schema.json -d"
]
}
}
# フックをインストール
npx husky add .husky/pre-commit "npx lint-staged" Python プロジェクトでは、公式の pre-commit フレームワークに check-json フックが組み込まれており、各ステージのファイルに対して json.loads を実行します。
よくある JSON バリデーションエラー
検証が失敗するとき、原因はほぼ常にこれらのどれかです —— それぞれ専用のガイドがあります:
- 末尾カンマ(最後の項目の後ろ)
- シングルクォート 代わりにダブルクォート、またはクォートなしのキー
- Unexpected-token エラー(HTML レスポンス、
undefined、コメント) - Unexpected end of input(切り詰めまたは閉じ忘れ)
- 「[object Object] is not valid JSON」 (オブジェクトが先に stringify されてからパースされた)
よくある質問
文字列が妥当な JSON かどうか確認するには?
try/catch で JSON.parse()(JavaScript)、または try/except で json.loads()(Python)に渡します。例外が出なければ妥当です。コードなしのチェックは ブラウザバリデータ で。
JSON を正規表現で検証できますか?
いいえ。JSON は再帰文法で正規表現では正しく表現できません。常に本物のパーサを使ってください —— JSON.parse()。
JSON の検証とパースの違いは?
パースはテキストを使える値に変えるもの、検証はパースができる ことを確認するもの。実務上、パースの成功がそのまま検証です —— 同じ操作で、妥当性だけ気にする時は結果を捨てるだけです。
スキーマに対して JSON を検証するには?
JSON Schema を Ajv(JavaScript)または jsonschema ライブラリ(Python)と組み合わせて使います。スキーマ検証は型、必須フィールド、制約をチェックします — — 構文だけではありません。
今すぐ JSON を検証 —— セットアップ不要
JSON を JSON バリデータ に貼って、構文エラーと正確な行・位置を即座に確認できます。すべてブラウザで動作し、データはマシンを離れません。
- JSON バリデータ —— ブラウザで即座に構文チェック
- JSON Fix —— 無効な JSON を修復、ただ印を付けるだけではない
- JSON Schema とは? —— 構造と型を検証、構文だけでなく
- JSON とは? —— JSON を妥当/無効にする文法規則