【PythonでJSON Validation】jsonschemaのインストール

【PythonでJSON Validation】jsonschemaのインストール プログラミング

「PythonでJSONデータをJSON Schemaに基づいてValidationしたい」
「JSON Formatter・Validatorを探している」

このような場合には、jsonschemaがオススメです。
この記事では、jsonschemaについて解説しています。

本記事の内容

  • jsonschemaとは?
  • jsonschemaのシステム要件
  • jsonschemaのインストール
  • jsonschemaの動作確認

それでは、上記に沿って解説していきます。

jsonschemaとは?

jsonschemaとは、JSON Schema(JSONスキーマ)のValidationを行うPythonライブラリです。
JSON Schemaは、JSONデータの構造をJSONそのもので定義するスキーマ言語になります。

JSON Schema
https://json-schema.org/

JSONデータは、何でもありなところがあります。
jsonschemaを使えば、その何でもありなJSONデータをValidationできます。

まずは、JSON FormatterとしてJSONデータであるかどうかのValidationが可能です。
そして、各プロパティの型チェックにも対応しています。

文字列しか認めないプロパティに、数値があればエラーを出力します。
また、存在チェックにも対応しています。

プロパティがない場合、エラーとして表示してくれます。
他にもフォーマットチェックも充実しています。
詳細は、公式ドキュメントをご覧ください。

jsonschema公式ドキュメント
https://python-jsonschema.readthedocs.io/en/stable/

jsonschemaの利用方法には、次の2種類があります。

  • コマンドラインツール
  • Python API(モジュール)

動作確認の説明では、それぞれの動作について説明しています。

以上、jsonschemaについて説明しました。
次は、jsonschemaのシステム要件を説明します。

jsonschemaのシステム要件

現時点(2022年8月)でのjsonschemaの最新バージョンは、4.13.0となります。
この最新バージョンは、2022年8月19日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.7
  • Python 3.8
  • Python 3.9
  • Python 3.10
  • Python 3.11

Python 3.11は勇み足ですが、以下のPython公式開発サイクルに準じています。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

他には、システム要件はありません。
基本的には、Pythonが動けばOKです。

以上、jsonschemaのシステム要件を説明しました。
次は、jsonschemaのインストールを説明します。

jsonschemaのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.2.2
setuptools 65.1.1
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、jsonschemaのインストールです。
jsonschemaのインストールは、以下のコマンドとなります。

pip install jsonschema

jsonschemaのインストールは、一瞬で終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package    Version
---------- -------
attrs      22.1.0
jsonschema 4.13.0
pip        22.2.2
pyrsistent 0.18.1
setuptools 65.1.1
wheel      0.36.2

jsonschemaは、2つのパッケージに依存していることが確認できます。
この程度であれば、既存環境にも問題なくjsonschemaを導入できるでしょう。

以上、jsonschemaのインストールを説明しました。
次は、jsonschemaの動作確認を説明します。

jsonschemaの動作確認

jsonschemaの動作確認を行います。
jsonschemaには、以下の動作方法があります。

  • コマンドラインツール
  • Python API(モジュール)

それぞれを以下で説明します。

コマンドラインツール

まずは、Validationの基準となるスキーマを用意します。
もちろん、JSON Schema(JSONスキーマ)の仕様に基づいた内容のファイルになります。

sample.schema

{
    "type": "object",
    "properties": {
        "price": {"type": "number"},
        "name": {"type": "string"}
    }
}

そして、Validation対象となるJSONファイルが必要です。
今回は、OK・NGそれぞれの場合のファイルを用意します。

ok.json

{"name": "Eggs", "price": 34.99}

ng.json

{"name" : "Eggs", "price" : "Invalid"}

Validationする場合は、次の形式のコマンドを用います。

jsonschema --instance 対象JSONファイル スキーマファイル

Validationした結果が、OKの場合。

$ jsonschema --instance ok.json sample.schema 
$

Validationした結果が、NGの場合。

$ jsonschema --instance ng.json sample.schema 
Invalid: 'Invalid' is not of type 'number'
$

Validationの結果がNGの場合、その内容が表示されます。
number型の「price」プロパティに文字列「Invalid」が設定されるとNGとなります。

Python API(モジュール)

コマンドラインツールの場合と考え方は、同じです。
スキーマを用意して、そのスキーマに基づいてチェックします。

OKとNGそれぞれの結果となるコードを用意しました。

ok.py

from jsonschema import validate

# スキーマ
schema = {
    "type": "object",
    "properties": {
        "price": {"type": "number"},
        "name": {"type": "string"},
    },
}

# OK
validate(instance={"name": "Eggs", "price": 34.99}, schema=schema)

ng.py

from jsonschema import validate

# スキーマ
schema = {
    "type": "object",
    "properties": {
        "price": {"type": "number"},
        "name": {"type": "string"},
    },
}

# NG
validate(instance={"name": "Eggs", "price": "Invalid"}, schema=schema)

それぞれのコードを実行すると、OKの場合は何も表示されません。
NGの場合に、次の例外エラーを表示します。

jsonschema.exceptions.ValidationError: 'Invalid' is not of type 'number'

Failed validating 'type' in schema['properties']['price']:
    {'type': 'number'}

On instance['price']:
    'Invalid'

例外が出て困る場合は、例外処理を行いましょう。
その場合の方法は、上記で挙げた公式ドキュメントに記載されています。

以上、jsonschemaの動作確認を説明しました。

タイトルとURLをコピーしました