Existe-t-il une bibliothèque python pour convertir un schéma JSON en une définition de classe python, similaire à jsonschema2pojo - https://github.com/joelittlejohn/jsonschema2pojo - pour Java?
Jusqu'à présent, la chose la plus proche que j'ai pu trouver est warlock , qui annonce ce flux de travail:
Construisez votre schéma
>>> schema = {
'name': 'Country',
'properties': {
'name': {'type': 'string'},
'abbreviation': {'type': 'string'},
},
'additionalProperties': False,
}
Créer un modèle
>>> import warlock
>>> Country = warlock.model_factory(schema)
Créez un objet en utilisant votre modèle
>>> sweden = Country(name='Sweden', abbreviation='SE')
Cependant, ce n'est pas aussi simple que cela. Les objets que Warlock produit manquent beaucoup de goodies introspectibles. Et s'il prend en charge les dict imbriqués lors de l'initialisation, je n'ai pas pu comprendre comment les faire fonctionner.
Pour donner un peu de contexte, le problème sur lequel je travaillais était de savoir comment prendre API JSONSchema de Chrome et produire une arborescence de générateurs de requêtes et de gestionnaires de réponses. Warlock ne semble pas trop loin de la réalité, le seul inconvénient est que les méta-classes de Python ne peuvent pas vraiment être transformées en "code".
Autres modules utiles à rechercher:
Si vous finissez par trouver une bonne solution unique pour cela, veuillez suivre votre question - j'adorerais en trouver une. J'ai versé à travers github, pypi, googlecode, sourceforge, etc. Et je n'ai rien trouvé de vraiment sexy.
Faute de solutions prédéfinies, je vais probablement bricoler quelque chose avec Warlock moi-même. Donc, si je vous bat, je mettrai à jour ma réponse. : p
python-jsonschema-objects est une alternative au démoniste, construit sur jsonschema
python-jsonschema-objects fournit une liaison automatique basée sur une classe aux schémas JSON à utiliser en python.
Utilisation:
Exemple de schéma 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"]
} '''
Conversion de l'objet de schéma en classe
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
Validation :
james.age = -2 python_jsonschema_objects.validators.ValidationError: -2 était inférieur ou égal à 0
Mais le problème est qu'il utilise toujours draft4validation alors que jsonschema a déplacé draft4validation, j'ai déposé un problème sur le référentiel à ce sujet. Sauf si vous utilisez une ancienne version de jsonschema, le package ci-dessus fonctionnera comme indiqué.
Je viens de créer ce petit projet pour générer des classes de code à partir du schéma json, même s'il s'agit de python je pense que cela peut être utile lorsque l'on travaille dans des projets d'entreprise:
pip install jsonschema2popo
l'exécution de la commande suivante générera un module python contenant les classes définies par json-schema (il utilise le modèle jinja2)
jsonschema2popo -o /path/to/output_file.py /path/to/json_schema.json
plus d'informations sur: https://github.com/frx08/jsonschema2popo