1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonでJSONデータを検証!jsonschemaの使い方

Posted at

PythonでJSONデータを検証!jsonschemaの使い方

目次

  1. はじめに
  2. jsonschemaとは
  3. インストール方法
  4. 基本的な使い方
  5. バリデーションの例
  6. 便利な応用例
  7. まとめ

1. はじめに

JSON は Web API や設定ファイルでよく使われる形式です。
しかし、受け取る JSON データが想定通りかどうかは常に確認する必要があります。
そこで便利なのが Python の jsonschema です。

jsonschema を使えば、JSON データがあるスキーマに沿っているか簡単に検証できます。


2. jsonschemaとは

jsonschema は Python のライブラリで、JSON Schema という規格に従って JSON データの構造を検証できます。

特徴:

  • データ型のチェック(文字列、数値、配列、オブジェクトなど)
  • 必須項目のチェック
  • 値の範囲や文字列長の制約
  • ネストした構造の検証

3. インストール方法

pip install jsonschema

4. 基本的な使い方

ステップ1: スキーマを定義

スキーマは JSON データの「設計図」です。
例えば、ユーザー情報を検証する場合:

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "integer", "minimum": 0},
        "email": {"type": "string", "format": "email"}
    },
    "required": ["name", "age"]
}

ステップ2: データを準備

user_data = {
    "name": "Alice",
    "age": 25,
    "email": "alice@example.com"
}

ステップ3: バリデーション

from jsonschema import validate, ValidationError

try:
    validate(instance=user_data, schema=schema)
    print("データは有効です。")
except ValidationError as e:
    print("データが無効です:", e.message)

5. バリデーションの例

必須項目がない場合

invalid_data = {"age": 25}

try:
    validate(instance=invalid_data, schema=schema)
except ValidationError as e:
    print(e.message)  # "'name' is a required property"

値が不正な場合

invalid_data = {"name": "Bob", "age": -5}

try:
    validate(instance=invalid_data, schema=schema)
except ValidationError as e:
    print(e.message)  # "-5 is less than the minimum of 0"

6. 便利な応用例

配列の検証

schema = {
    "type": "array",
    "items": {"type": "integer"}
}

validate([1, 2, 3], schema)  # OK
validate([1, "a", 3], schema)  # NG

ネストしたオブジェクト

schema = {
    "type": "object",
    "properties": {
        "user": {
            "type": "object",
            "properties": {
                "name": {"type": "string"},
                "age": {"type": "integer"}
            },
            "required": ["name"]
        }
    }
}

data = {"user": {"name": "Charlie", "age": 30}}
validate(instance=data, schema=schema)  # OK

7. まとめ

  • jsonschema は JSON データの構造や値を簡単に検証できる。
  • スキーマを定義して validate() するだけでチェック可能。
  • ネスト構造や配列、必須項目、数値範囲などもサポート。
  • Web API や設定ファイルのデータチェックに非常に便利。

💡 ポイント

  • スキーマに "required" を入れることで必須項目を簡単に管理できる
  • format を使うとメールや日時などの形式チェックもできる
  • 複雑なデータでも再帰的にネストして検証可能

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?