「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.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年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の動作確認を説明しました。