4
votes

Valider les données JSON à l'aide de python

Je suis assez nouveau en python, seriez-vous si gentil de m'aider? Cela semble être une question vraiment triviale. J'ai besoin de créer une fonction qui valide les données json entrantes et renvoie le dict python. Il devrait vérifier si tous les champs nécessaires sont présents dans le fichier json et également valider les types de données de ces champs. J'ai besoin d'utiliser try-catch. Pourriez-vous fournir des extraits ou des exemples qui me donnent des réponses?


0 commentaires

3 Réponses :


2
votes

Comme 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 json.decoder.JSONDecodeError:
            print("Invalid JSON") # in case json is invalid
        else:
            print("Valid JSON") # in case json is valid


2 commentaires

'JSONDecodeError' n'est pas défini et produit lui-même une erreur! Le nom correct est «json.decoder.JSONDecodeError»!


@Apostolos désolé, il semble que j'ai commis cette erreur pour une raison quelconque. Modifié, la réponse serait donc correcte pour les futurs téléspectateurs. Bien que ma réponse ne soit pas celle qui répond vraiment à la question originale



15
votes

Si vous n'avez pas vérifié la bibliothèque jsonschema , 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 effectuer des validations basées sur le 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)


0 commentaires

2
votes

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

J'ai écrit ma propre bibliothèque pour définir des schémas, qui a beaucoup de fonctionnalités supplémentaires par rapport à jsonschema:

https://github.com/FlorianDietz/syntaxTrees

Il donne des messages d'erreur très précis, vous permet d'écrire code pour personnaliser le processus de validation, vous permet de définir des fonctions qui opèrent 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 classes, de la même manière que Django définit les 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'


0 commentaires