JSONスキーマをpythonクラス定義に変換するためのpythonライブラリはありますか?
3 に答える
これまでのところ、私が見つけることができた最も近いものは、このワークフローを宣伝する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を使用して、リクエスト ジェネレータとレスポンス ハンドラのツリーを生成する方法でした。Warlock はあまり的外れではないように見えますが、唯一の欠点は、Python のメタクラスを実際には「コード」に変換できないことです。
その他の便利なモジュール:
- jsonschema - (ウォーロックはその上に構築されています)
- valideer - jsonschema に似ていますが、名前が悪いです。
- 束- dotdictと構造体の中間にある興味深い構造ビルダー
これに対する優れたワンストップ ソリューションを見つけた場合は、質問をフォローアップしてください。見つけたいと思います。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を使用していることです。これに関してレポに問題を提出しました。古いバージョンの jsonschema を使用していない限り、上記のパッケージは示されているように機能します。