web-dev-qa-db-fra.com

Valider les données JSON à l'aide python

Je suis assez nouveau dans python Donc, seriez-vous si gentil de m'aider? Cela semble être une question vraiment triviale. Je dois créer une fonction qui valide les données JSON entrantes et renvoyées python dict. Il devrait vérifier si tous les champs nécessaires sont présents au fichier JSON et valident également les types de données de ces champs. Je dois utiliser try-attraper. Pourriez-vous fournir une sorte d'extraits ou d'exemples qui me donnent réponses?

4
LennyDan

Si vous n'avez pas de chèque jsonschema Bibliothèque, il peut être utile de valider les données. schéma JSON est un moyen de décrire le contenu de JSON. La bibliothèque utilise simplement le format pour créer des validations en fonction du schéma donné.

J'ai fait un exemple simple à partir d'une utilisation de base.

import json
from jsonschema import validate

# Describe what kind of json you expect.
schema = {
    "type" : "object",
    "properties" : {
        "description" : {"type" : "string"},
        "status" : {"type" : "boolean"},
        "value_a" : {"type" : "number"},
        "value_b" : {"type" : "number"},
    },
}

# Convert json to python object.
my_json = json.loads('{"description": "Hello world!", "status": true, "value_a": 1, "value_b": 3.14}')

# Validate will raise exception if given json is not
# what is described in schema.
validate(instance=my_json, schema=schema)

# print for debug
print(my_json)
7
T.Nylund

J'ai eu le même problème et j'étais insatisfait de la solution existante d'utiliser Jsonschema. Il donne des messages d'erreur terribles qui ne sont pas du tout convivial.

J'ai écrit ma propre bibliothèque pour définir les schémas, qui a beaucoup de fonctionnalités supplémentaires sur Jsonschema:

https://github.com/floriandietz/yntaxtrees

Il donne des messages d'erreur très précis, vous permet d'écrire du code pour personnaliser le processus de validation, vous permet de définir des fonctions qui fonctionnent sur le JSON validé et crée même une documentation HTML pour les schémas que vous définissez.

Les schémas sont définis comme des cours, similaires à Comment Django définir des modèles:

class MyExampleNode(syntaxTreesBasics.Node):
    field_1 = fields.Float(default=0)
    field_2 = fields.String()
    field_3 = fields.Value('my_example_node', null=True, default=None)
    class Meta:
        name = 'my_example_node'
2
Florian Dietz

Lorsque vous utilisez un fichier JSON, vous pouvez utiliser cet exemple:

import json
def validate(filename):
    with open(filename) as file:
        try:
            return json.load(file) # put JSON-data to a variable
        except JSONDecodeError:
            print("Invalid JSON") # in case json is invalid
        else:
            print("Valid JSON") # in case json is valid
1
ATernative