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?

Author: joelittlejohn, 2012-09-17

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:

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

 19
Author: synthesizerpatel,
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.

 8
Author: igaurav,
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

 1
Author: frx08,
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