Gibt es eine Python-Bibliothek zum Konvertieren eines JSON-Schemas in eine Python-Klassendefinition, ähnlich wie jsonschema2pojo - https://github.com/joelittlejohn/jsonschema2pojo - für Java?Konvertieren eines JSON-Schemas in eine Python-Klasse
Antwort
Bisher ist die nächste, was ich habe, ist warlock in der Lage zu finden, die diesen Workflow bewirbt:
>>> schema = {
'name': 'Country',
'properties': {
'name': {'type': 'string'},
'abbreviation': {'type': 'string'},
},
'additionalProperties': False,
}
Erstellen Sie ein Modell
Bauen Sie Ihr Schema
>>> import warlock
>>> Country = warlock.model_factory(schema)
Erstellen Sie ein Objekt mit Ihrem Modus l
>>> sweden = Country(name='Sweden', abbreviation='SE')
Allerdings ist es nicht ganz so einfach. Die Objekte, die Warlock produziert, fehlen in der Art von introspektablen Leckerbissen. Und wenn es verschachtelte Dicts bei der Initialisierung unterstützt, konnte ich nicht herausfinden, wie sie funktionieren.
Um ein wenig Hintergrund zu geben, war das Problem, an dem ich arbeitete, wie man Chrome's JSONSchema API nehmen und einen Baum von Anfragegeneratoren und Antworthandlern erzeugen. Warlock scheint nicht allzu weit daneben zu liegen, der einzige Nachteil ist, dass Meta-Klassen in Python nicht wirklich in "Code" umgewandelt werden können.
Weitere nützliche Module suchen:
- jsonschema - (der Warlock oben auf gebaut wird)
- valideer - ähnlich wie jsonschema aber mit einem schlechteren Namen.
- bunch - Eine interessante Struktur Bauer das ist auf halbem Weg zwischen a dotdict und construct
Wenn Sie Ihre Frage eine gute Lösung aus einer Hand für diese bitte folgen am Ende der Suche - ich würde gerne einen finden. Ich goss durch github, pypi, googlecode, sourceforge, etc .. Und konnte einfach nichts wirklich sexy finden.
Da es keine vorgefertigten Lösungen gibt, werde ich wahrscheinlich selbst etwas mit Warlock zusammen machen. Also, wenn ich dich dazu schlagen werde, werde ich meine Antwort aktualisieren. : P
Dito auf Follow-up. Ich ging durch die gleichen Quellen und konnte keine akzeptable Lösung finden. Ich habe sogar Warlock gegabelt und angefangen, Rekursion in ihrer Klassendefinition zu implementieren (was anscheinend ziemlich einfach zu sein scheint), gab aber auf. –
python-jsonschema-objects ist eine Alternative zu warlock, zur Verwendung in Python
Python-jsonschema-Objekte bietet ein automatisches klassenbasierte Bindung an JSON Schemata auf der jsonschema zu bauen.
Verbrauch:
Probe Json Schema
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"]
} '''
Konvertieren des Schemaobjekt Klasse
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
Validierung:
james.age = -2 python_jsonschema_objects.validators.ValidationError: -2 was less or equal to than 0
Aber Problem ist, es ist immer noch draft4validation, während jsonschema über draft4validation bewegt, ich habe eine Ausgabe auf dem Repo in Bezug auf diese eingereicht. Sofern Sie nicht die alte Version von jsonschema verwenden, funktioniert das obige Paket wie gezeigt.
- 1. Konvertieren eines Objekts in eine Funktion
- 2. Konvertieren eines Wörterbuch in eine Liste
- 3. Powershell: Konvertieren eines Objekts in eine Zeichenfolge
- 4. Konvertieren eines Zeichenfolgenfelds in eine Sammlungsgruppe
- 5. (Python) Konvertieren eines Wörterbuchs in eine Liste?
- 6. Konvertieren eines GIF in eine CUR-Datei
- 7. Konvertieren eines Bilds in Graustufen
- 8. Konvertieren eines Zeichens in keycode
- 9. Konvertieren eines WS in WAP
- 10. Konvertieren eines Menschen in 3D
- 11. Konvertieren eines Datums in COBOL
- 12. Konvertieren eines ASTNode in Code
- 13. Konvertieren eines NSObject in NSData
- 14. Konvertieren eines DOM-Elements in eine Zeichenfolge in PHP
- 15. Konvertieren eines Datumsfelds in eine Zeichenfolge in linq
- 16. Konvertieren eines Datenrahmens in xts
- 17. Konvertieren eines char * in int
- 18. Konvertieren eines NSString * in char?
- 19. Konvertieren eines Bash-Arrays in eine getrennte Zeichenfolge
- 20. Spark SQL: Konvertieren eines Wochentagsnamens in eine ganze Zahl
- 21. Konvertieren eines Spark-Dataframes in eine Scala Map-Sammlung
- 22. Konvertieren eines JSP-Tags in eine JSF-Komponente
- 23. Konvertieren eines Python-Skripts in eine Web-Anwendung
- 24. Konvertieren eines SAS-Datasets in eine CSV-Datei
- 25. Konvertieren eines Vektors in eine durch Kommas getrennte Zeichenfolge
- 26. Konvertieren eines C++. Exe-Projekts in eine DLL
- 27. Konvertieren eines JSON in eine UTF-8-Zeichenfolge
- 28. Konvertieren eines Scapy-Pakets in eine Zeichenfolge erzeugt ein E?
- 29. Konvertieren eines Datums in Text in VBA
- 30. Konvertieren eines Int in QBytearray in Qt
Können Sie näher erläutern, warum die Funktionalität des Standardbibliotheksmoduls [json] (http://docs.python.org/library/json.html) für Ihre Anforderungen nicht ausreicht und Sie die generierten Klassendefinitionen benötigen? –
Die Antwort auf Ihren Kommentar ist ziemlich einfach - das Arbeiten mit rohen Wörterbüchern ist eine Objektverwaltung der zweiten Klasse und die meisten Menschen mögen die geschossene Schrotflinte nicht mit dem Gesicht, das JSON bietet. – synthesizerpatel