Überprüfen Sie JSON-Objekte mit Python DictShield

** Ich habe es überhaupt nicht bemerkt, als ich es geschrieben habe, aber jetzt scheint es, dass es zu schematics verschoben wurde. Ich werde bald die "Schaltplan" -Version schreiben ... vielleicht. ** **.


dictshield ist eine Bibliothek zum Überprüfen von JSON-Objekten.

Da es nach Klassen definiert werden kann, scheint es einfach zu verwenden zu sein, da es der Modell- und Formularklasse von "Django", die ich normalerweise verwende, der Dokumentklasse "Mongoengine" usw. ähnlich ist und die Codebasis kompakt und die Sichtbarkeit gut ist. Versuch. Während Sie den Code durchgehen, werden anscheinend auch MongoDB und JSON Schema berücksichtigt.

Wie benutzt man

Basisausgabe

documents.py


from dictshield.document import Document
from dictshield.fields import StringField, IntField, FloatField, BooleanField, DateTimeField

class SampleDocument(Document):
    id = IntField(min_value=0)
    name = StringField()
    gps_attached = BooleanField()
    temperature = FloatField()
    created_at = DateTimeField()

Durch das Überprüfen von JSON-Objekten wird das JSON-Objekt in "dict" konvertiert und anschließend in die Dokumentklasse geworfen.

import json

json_data = '{"id": 1, "name": "foo", "gps_attached": true, "temperature": 23.5, "created_at": "2013-01-01T12:34:56" }'

data = json.loads(json_data)

document = SampleDocument(**data)
document.validate()  #True wird zurückgegeben

Behandlung von verschachtelten (?) JSON-Objekten

Verwenden Sie die Klasse "EmbeddedDocument", um verschachtelte (?) JSON-Objekte zu verwenden. Ein Beispiel für die Trennung der Informationen von Peripheriesensoren.

documents.py


from dictshield.document import Document, EmbeddedDocument
from dictshield.fields import StringField, IntField, FloatField, BooleanField, DateTimeField
from dictshield.fields.compound import EmbeddedDocumentField


class PeripheralEmbeddedDocument(EmbeddedDocument):
    gps_attached = BooleanField()
    temperature = FloatField()

class SampleDocument(Document):
    id = IntField()
    name = StringField(max_length=5)
    created_at = DateTimeField()
    peripheral = EmbeddedDocumentField(PeripheralEmbeddedDocument)
data = {
    u'created_at': u'2013-01-01T12:34:56',
    u'id': 1,
    u'name': u'foo',
    u'peripheral': {
        u'gps_attached': True,
        u'temperature': 23.5
    }
}

document = SampleDocument(**data)
document.validate()  #True wird zurückgegeben

Ausnahme

Wenn die Validierung fehlschlägt, wird eine ShieldException ausgelöst.

data = {
    u'created_at': u'2013-01-01T12:34:56',
    u'id': 1,
    u'name': u'hogheoge',  #lange
    u'peripheral': {
        u'gps_attached': True,
        u'temperature': 23.5
    }
}

document = SampleDocument(**data)
document.validate()
---------------------------------------------------------------------------
ShieldException                           Traceback (most recent call last)
<ipython-input-76-8d15894a526a> in <module>()
----> 1 document.validate()

/somewhere/lib/python2.7/site-packages/dictshield/document.pyc in validate(self, validate_all)
    333                 # NB: raising a ShieldDocException in this case would be more
    334                 # consistent, but existing code might expect ShieldException
--> 335                 raise err
    336
    337         if errs:

ShieldException: String value is too long - name:hogheoge

Was mir aufgefallen ist


Referenz

Recommended Posts

Überprüfen Sie JSON-Objekte mit Python DictShield
[Python] Validierung von JSON mit Voluptuous
Python #JSON
Starten Sie Python
Scraping mit Python
Bearbeiten Sie Objekte mit der einfachen Python-API von Blender 2.8
Bearbeiten Sie Redmine mit Python Redmine
[Python] Verwenden Sie JSON mit Python
Fibonacci-Sequenz mit Python
Umgang mit Json in Python
Datenbereinigung mit Python
Verwenden von Python # externen Paketen
WiringPi-SPI-Kommunikation mit Python
Altersberechnung mit Python
Überprüfen Sie die E-Mail mit Python
Suchen Sie Twitter mit Python
Namensidentifikation mit Python
Hinweise zur Verwendung von Python-Unterprozessen
Versuchen Sie es mit Tweepy [Python2.7]
Python-Memo mit perl-ternärem Operator
Mit Python abflachen
Scraping mit Python 3.5 async / await
Einfaches Formatieren von JSON mit Python
[S3] CRUD mit S3 unter Verwendung von Python [Python]
[Python] Versuchen Sie, Tkinters Leinwand zu verwenden
Informationen zu Python-Objekten und -Klassen
Informationen zu Python-Variablen und -Objekten
Verwenden von Quaternion mit Python ~ numpy-quaternion ~
Versuchen Sie es mit Kubernetes Client -Python-
Python-Notizen zur Verwendung von Perl-Spezialvariablen
[Python] Verwenden von OpenCV mit Python (Basic)
Scraping mit Python 3.5 Async-Syntax
Überwachung von Website-Änderungen mit Python
Mit Python auf Twitter posten
Objektäquivalenzbeurteilung in Python
Starten Sie mit Python zu Selen
Suchalgorithmus mit word2vec [Python]
Ändern Sie die Python-Version mit pyenv
# 1 [python3] Einfache Berechnung mit Variablen
Erstellen Sie JIRA-Tickets mit Python
Instrumentensteuerung mit Python [pyvisa]
Bearbeiten Sie Tabellenkalkulationen lokal mit Python
Python-Memo mit Perl --join
Web Scraping mit Selenium (Python)
Lassen Sie uns rote Objekte mit Python erkennen
Online-Übertragung mit Python
Formatieren Sie json mit Vim (mit Python)
Datenanalyse mit Python-Pandas
Übersetzt mit Googletrans in Python
Verwenden des Python-Modus in der Verarbeitung
Verwenden von OpenCV mit Python @Mac
[Python] Schießspiel mit Pyxel
Senden Sie mit Python mit Google Mail
Lesen von JSON-Daten mit Python