Convertir un esquema JSON en una clase de python

¿Existe una biblioteca de python para convertir un esquema JSON en una definición de clase de python, similar a jsonschema2pojo – https://github.com/joelittlejohn/jsonschema2pojo – para Java?

Hasta ahora, lo más cercano que he podido encontrar es Warlock , que anuncia este flujo de trabajo:

Construye tu esquema

>>> schema = { 'name': 'Country', 'properties': { 'name': {'type': 'string'}, 'abbreviation': {'type': 'string'}, }, 'additionalProperties': False, } 

Crear un modelo

 >>> import warlock >>> Country = warlock.model_factory(schema) 

Crea un objeto utilizando tu modelo

 >>> sweden = Country(name='Sweden', abbreviation='SE') 

Sin embargo, no es tan fácil. Los objetos que produce Warlock carecen de muchos elementos introspectibles. Y si admite dicts nesteds en la inicialización, no pude averiguar cómo hacer que funcionen.

Para dar un poco de historia, el problema en el que estaba trabajando era cómo tomar la API JSONSchema de Chrome y producir un árbol de generadores de solicitudes y controladores de respuesta. Warlock no parece estar tan lejos de la marca, el único inconveniente es que las metaclasas en Python no pueden convertirse en “código”.

Otros módulos útiles para buscar:

  • jsonschema – (que Warlock está construido encima de)
  • Valideer – similar a jsonschema pero con un nombre peor.
  • manojo : un interesante constructor de estructuras que está a medio camino entre un punto de partida y una construcción

Si terminas encontrando una buena solución integral para esto, por favor haz un seguimiento de tu pregunta, me encantaría encontrar una. Vertí github, pypi, googlecode, sourceforge, etc. Y no pude encontrar nada realmente sexy.

A falta de soluciones prefabricadas, es probable que me improvise algo con Warlock. Así que si te gano, actualizaré mi respuesta. :pag

python-jsonschema-objects es una alternativa a warlock, construido sobre jsonschema

python-jsonschema-objects proporciona un enlace automático basado en clases a los esquemas JSON para su uso en python.

Uso:

Ejemplo de esquema de 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"] } ''' 

Convertir el objeto de esquema a clase

  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 

Validación:

james.age = -2 python_jsonschema_objects.validators.ValidationError: -2 fue menor o igual que 0

Pero el problema es que todavía está usando draft4validation mientras que jsonschema se ha movido sobre draft4validation, presenté un problema en el repository con respecto a esto. A menos que esté utilizando la versión anterior de jsonschema, el paquete anterior funcionará como se muestra.

Acabo de crear este pequeño proyecto para generar clases de código a partir del esquema json, incluso si tratar con Python creo que puede ser útil cuando se trabaja en proyectos empresariales:

 pip install jsonschema2popo 

ejecutar el siguiente comando generará un módulo de Python que contiene clases definidas por el esquema json (usa plantillas de jinja2)

 jsonschema2popo -o /path/to/output_file.py /path/to/json_schema.json 

más información en: https://github.com/frx08/jsonschema2popo