Konwersja schematu JSON na klasę Pythona
Czy istnieje Biblioteka Pythona do konwersji schematu JSON na definicję klasy Pythona, podobną do jsonschema2pojo -- https://github.com/joelittlejohn/jsonschema2pojo -- dla Javy?
3 answers
Do tej pory najbliżej mi było znaleźć warlock , który reklamuje ten workflow:
Zbuduj swój schemat
>>> schema = {
'name': 'Country',
'properties': {
'name': {'type': 'string'},
'abbreviation': {'type': 'string'},
},
'additionalProperties': False,
}
Utwórz model
>>> import warlock
>>> Country = warlock.model_factory(schema)
Tworzenie obiektu za pomocą modelu
>>> sweden = Country(name='Sweden', abbreviation='SE')
Nie jest to jednak takie proste. Przedmioty, które Czarnoksiężnik produkuje, nie mają wiele wspólnego z introspektywnymi smakołykami. A jeśli obsługuje zagnieżdżone dicty przy inicjalizacji, nie byłem w stanie dowiedzieć się, jak je zrobić praca.
Aby dać trochę tło, problem, nad którym pracowałem, polegał na tym, jak wykorzystać Jsonschema API Chrome i stworzyć drzewo generatorów zapytań i programów obsługi odpowiedzi. Warlock nie wydaje się zbyt odległy, jedynym minusem jest to, że meta-klasy w Pythonie nie mogą być zamienione w'kod'.
Inne przydatne moduły do szukania:
- jsonschema - (na którym Warlock jest zbudowany)
- valideer - podobne do jsonschema, ale o gorszej nazwie.
- bunch - ciekawy konstruktor konstrukcji, który znajduje się w połowie drogi pomiędzy a dotdict a construct
Jeśli w końcu znajdziesz dobre rozwiązanie dla tego, proszę, rozwiąż swoje pytanie - chciałbym je znaleźć. Przelałem przez github, pypi, googlecode, sourceforge itp.. I nie mogłem znaleźć niczego naprawdę seksownego.
Z braku gotowych rozwiązań, pewnie coś złączę z Sam Czarnoksiężnik. Więc jeśli cię uprzedzę, zaktualizuję odpowiedź. : p
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-31 10:54:16
Python-jsonschema-objects jest alternatywą dla Warlocka, zbudowaną na bazie jsonschema
Python-jsonschema-objects zapewnia automatyczne powiązanie klas ze schematami JSON do użytku w Pythonie.
Użycie:
Przykładowy Schemat 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"]
} '''
Konwersja obiektu schematu do klasy
import python_jsonschema_objects as pjs
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
Walidacja:
James.wiek = -2 python_jsonschema_objects.walidatorów.ValidationError: -2 było mniej lub równe niż 0
Ale problem w tym, że nadal używa draft4validation podczas gdy jsonschema przesunęła się nad draft4validation, złożyłem problem w repo dotyczący tego. Jeśli nie używasz starej wersji jsonschemy, powyższy pakiet będzie działał tak, jak pokazano.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-09 13:26:45
Właśnie stworzyłem ten mały projekt do generowania klas kodu ze schematu json, nawet jeśli radzenie sobie z Pythonem może być przydatne podczas pracy w projektach biznesowych:
pip install jsonschema2popo
Uruchomienie następującego polecenia spowoduje wygenerowanie modułu Pythona zawierającego klasy zdefiniowane w schemacie json (używa szablonów jinja2)
jsonschema2popo -o /path/to/output_file.py /path/to/json_schema.json
Więcej informacji na: https://github.com/frx08/jsonschema2popo
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-03 14:29:05