JSONスキーマをpythonクラス定義に変換するためのpythonライブラリがあり、jsonschema2pojoに似ています (https://github.com/joelittlejohn/jsonschema2pojo -Javaの場合?
これまでのところ、私が見つけた最も近いものは warlock で、このワークフローを宣伝しています。
スキーマを作成します
>>> schema = {
'name': 'Country',
'properties': {
'name': {'type': 'string'},
'abbreviation': {'type': 'string'},
},
'additionalProperties': False,
}
モデルを作成します
>>> import warlock
>>> Country = warlock.model_factory(schema)
モデルを使用してオブジェクトを作成します
>>> sweden = Country(name='Sweden', abbreviation='SE')
しかし、それはそれほど簡単ではありません。ウォーロックが生成するオブジェクトは、内省可能なグッズの点で多くを欠いています。また、初期化時にネストされた辞書をサポートしている場合、それらを機能させる方法を理解できませんでした。
少し背景を説明すると、私が取り組んでいた問題は ChromeのJSONSchema API を取得して、リクエストジェネレーターとレスポンスハンドラーのツリーを作成する方法でした。ウォーロックはあまり目立たないように見えませんが、唯一の欠点は、Pythonのメタクラスを実際に「コード」に変換できないことです。
探すべき他の有用なモジュール:
このための適切なワンストップソリューションを見つけた場合は、質問をフォローアップしてください-見つけたいと思います。私はgithub、pypi、googlecode、sourceforgeなどに注ぎました。そして、本当にセクシーなものを見つけることができませんでした。
事前に作成されたソリューションがないため、私はおそらくウォーロックと一緒に何かを考え出すでしょう。だから私があなたを倒した場合、私は私の答えを更新します。 :p
python-jsonschema-objects はウォーロックの代替であり、jsonschemaの上に構築します
python-jsonschema-objectsは、Pythonで使用するJSONスキーマへのクラスベースの自動バインディングを提供します。
用途:
サンプルJsonスキーマ
schema = '''{
"title": "Example Schema",
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"age": {
"description": "Age in years",
"type": "integer",
"minimum": 0
},
"dogs": {
"type": "array",
"items": {"type": "string"},
"maxItems": 4
},
"gender": {
"type": "string",
"enum": ["male", "female"]
},
"deceased": {
"enum": ["yes", "no", 1, 0, "true", "false"]
}
},
"required": ["firstName", "lastName"]
} '''
スキーマオブジェクトをクラスに変換する
import python_jsonschema_objects as pjs
import json
schema = json.loads(schema)
builder = pjs.ObjectBuilder(schema)
ns = builder.build_classes()
Person = ns.ExampleSchema
james = Person(firstName="James", lastName="Bond")
james.lastName
u'Bond' james
example_schema lastName=Bond age=None firstName=James
検証:
james.age = -2 python_jsonschema_objects.validators.ValidationError:-2は0以下でした
しかし問題は、jsonschemaがdraft4validationに移動している間、それがまだdraft4validationを使用していることです。これに関するリポにissueを提出しました古いバージョンのjsonschemaを使用していない限り、上記のパッケージは次のように動作します。
pythonを扱う場合でも、jsonスキーマからコードクラスを生成するために、この小さなプロジェクトを作成しました。ビジネスプロジェクトで作業するときに役立つと思います。
pip install jsonschema2popo
次のコマンドを実行すると、pythonモジュールが生成されます(jinja2テンプレートを使用します)
jsonschema2popo -o /path/to/output_file.py /path/to/json_schema.json