Valider les objets JSON à l'aide de Python DictShield

** Je ne l'ai pas remarqué du tout quand je l'ai écrit, mais maintenant il semble qu'il soit passé à schematics. J'écrirai bientôt la version schematics ... peut-être. ** **


dictshield est une bibliothèque pour valider des objets JSON.

Comme il peut être défini par classe, il semble facile à utiliser car il est similaire au modèle et à la classe de formulaire de django que j'utilise habituellement, à la classe de document de mongoengine, etc., et la base de code est compacte et la visibilité est bonne. procès. Au fur et à mesure que vous suivez le code, il semble que MongoDB et JSON Schema soient également pris en compte.

Comment utiliser

Édition de base

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()

L'inspection des objets JSON convertit l'objet JSON en «dict», puis le jette dans la classe de document.

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 est retourné

Gestion des objets JSON imbriqués (?)

Pour utiliser un objet JSON imbriqué (?), Utilisez la classe ʻEmbeddedDocument`. Un exemple de séparation des informations des capteurs périphériques.

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 est retourné

exception

Si la validation échoue, une ShieldException sera lancée.

data = {
    u'created_at': u'2013-01-01T12:34:56',
    u'id': 1,
    u'name': u'hogheoge',  #longue
    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

Ce que j'ai remarqué


référence

Recommended Posts

Valider les objets JSON à l'aide de Python DictShield
[Python] Validation de JSON avec Voluptuous
Python #JSON
Commencez à utiliser Python
Scraping à l'aide de Python
Manipulez des objets à l'aide de l'API Python de bas niveau de Blender 2.8
Manipuler Redmine à l'aide de Python Redmine
[Python] Utiliser JSON avec Python
Séquence de Fibonacci utilisant Python
Manipulation de json en python
Nettoyage des données à l'aide de Python
Utilisation des packages Python #external
Câblage Communication Pi-SPI avec Python
Calcul de l'âge à l'aide de python
Valider l'e-mail avec Python
Rechercher sur Twitter avec Python
Identification de nom à l'aide de python
Notes sur l'utilisation de sous-processus Python
Essayez d'utiliser Tweepy [Python2.7]
mémo python utilisant l'opérateur perl-ternaire
Aplatir à l'aide du rendement Python de
Scraping à l'aide de Python 3.5 async / await
Formatez facilement JSON avec Python
[S3] CRUD avec S3 utilisant Python [Python]
[Python] Essayez d'utiliser le canevas de Tkinter
À propos des objets et des classes Python
À propos des variables et des objets Python
Utilisation de Quaternion avec Python ~ numpy-quaternion ~
Essayez d'utiliser Kubernetes Client -Python-
notes python pour l'utilisation de variables spéciales perl
[Python] Utilisation d'OpenCV avec Python (basique)
Scraping à l'aide de la syntaxe Python 3.5 Async
Surveillance des changements de site Web à l'aide de python
Publier sur Twitter en utilisant Python
Jugement d'équivalence d'objet en Python
Commencez à Selenium en utilisant python
Algorithme de recherche utilisant word2vec [python]
Changer la version de python à l'aide de pyenv
# 1 [python3] Calcul simple à l'aide de variables
Créer des tickets JIRA en utilisant Python
Contrôle d'instruments à l'aide de Python [pyvisa]
Manipulez les feuilles de calcul localement à l'aide de Python
mémo python utilisant perl --join
Web scraping avec Selenium (Python)
Reconnaissons les objets rouges avec python
Diffusion sur LINE en utilisant python
Formater json avec Vim (avec python)
Analyse de données à l'aide de pandas python
Traduit à l'aide de googletrans en Python
Utilisation du mode Python dans le traitement
Utiliser OpenCV avec Python @Mac
[Python] Jeu de tir avec pyxel
Envoyer en utilisant Python avec Gmail
Lire des données json avec python