37

JSONスキーマをpythonクラス定義に変換するためのpythonライブラリはありますか?

4

3 に答える 3

32

これまでのところ、私が見つけることができた最も近いものは、このワークフローを宣伝する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

于 2012-11-01T17:25:14.420 に答える
21

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 を使用していない限り、上記のパッケージは示されているように機能します。

于 2014-10-16T07:35:05.087 に答える