Преобразование схемы JSON в класс python

Существует ли библиотека python для преобразования схемы JSON в определение класса python, аналогичная jsonschema2pojo - https://github.com/joelittlejohn/jsonschema2pojo - для Java?

Ответы

Ответ 1

До сих пор самое близкое, что я смог найти, это 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')

Однако, это не совсем так просто. Объекты, которые производят Чернокнижники, не имеют большого количества способностей к понятным позитивам. И если он поддерживает вложенные dicts при инициализации, я не смог понять, как заставить их работать.

Чтобы дать немного информации, проблема, над которой я работал, заключалась в том, как сделать API JSONSchema и создать дерево генераторов запросов и обработчиков ответов. Чернокнижник не кажется слишком далеким от следа, единственным недостатком является то, что мета-классы в Python действительно не могут быть превращены в "код".

Другие полезные модули для поиска:

  • jsonschema - (какой чернокнижник построен поверх)
  • valideer - похоже на jsonschema, но с худшим именем.
  • bunch - интересный конструктор структуры, который находится на полпути между dotdict и construct

Если вы в конечном итоге найдете подходящее решение для этого, пожалуйста, позаботьтесь о своем вопросе - я бы хотел его найти. Я налил через github, pypi, googlecode, sourceforge и т.д. И просто не мог найти ничего действительно сексуального.

Из-за отсутствия готовых решений я, вероятно, соберу что-нибудь с Чернокнижником. Поэтому, если я побью тебя, я обновлю ответ.: Р

Ответ 2

python-jsonschema-objects является альтернативой чернокнижнику, построенным на вершине jsonschema

python-jsonschema-objects предоставляет автоматическую привязку к классам для схем JSON для использования в python.

Применение:

Пример схемы 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   
 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

Но проблема в том, что она все еще использует draft4validation, в то время как jsonschema переместилась над draft4validation, я зарегистрировал проблему в репо относительно этого.  Если вы не используете старую версию jsonschema, вышеуказанный пакет будет работать, как показано.