Validez votre objet JSON

Traduit automatiquement de Deepl

Nous utilisons de plus en plus le format JSON. Par exemple, pour enregistrer des paramètres dans un fichier, pour stocker la configuration d’un logiciel, ou pour échanger des données client sur le web avec d’autres serveurs.

Comment pouvez-vous valider que les données reçues sont dans le format attendu? Comment valider que toutes les informations nécessaires sont bien présentes ? Comment faire cette validation sans écrire une méthode fastidieuse pour chaque type de format JSON ?

Il suffit d’écrire un schéma JSON et d’utiliser la commande JSON Validate nouvelle commande !

Préambule
Comme vous le savez peut-être déjà, il existe une différence entre un document XML « bien formé » et un document XML « valide ». Un document XML dont la syntaxe est correcte est appelé « bien formé » et un document XML validé par une DTD est à la fois « bien formé » et « valide ».
Vous pouvez faire de même avec les documents JSON. Vous pouvez écrire un schéma JSON pour décrire votre document JSON. Pour connaître la grammaire et la syntaxe du schéma JSON, je vous conseille de vous rendre sur le site officiel : http://json-schema.org/.

Commande JSON Validate

Avec la commande JSON Parse vous pouvez déjà vérifier que le document JSON est« bien formé ». Depuis 4D v16 R4, la commande JSON Validate vous permet de vérifier que le document JSON est« Valide » selon votre schéma JSON.

Exemple de base de données

La nouvelle JSON Validate renvoie un objet. Dans cet objet, l’attribut « success » est un booléen, sa valeur est vraie lorsque le document est valide et false lorsque le document est invalide par rapport au schéma JSON passé en paramètre. L’attribut « errors » est un tableau d’objets contenant toutes les informations nécessaires pour comprendre et trouver où se trouve l’erreur.

Exemple de code

Par exemple, nous utilisons le schéma JSON suivant varSchema:

{
     "$schema": "http://json-schema.org/draft-04/schema#",
     "title": "Person",
     "type": "object",
     "properties": {
         "firstName": {
             "type": "string"
         },
         "lastName": {
             "type": "string"
         },
         "gender": {
             "description": "Gender is M or F",
             "enum": [ "M","F" ]
         },
         "birthday": {
             "type": "object",
             "properties": {
                 "day": {"type": "number"},
                 "month": {"type": "number"},
                 "year": {"type": "number"}
             },
             "required": ["day", "month", "year"]
         }
     },
     "required": ["firstName", "lastName"]
 }

Nous voulons vérifier si le document JSON suivant varJSON est valide :

{
    "firstName": "John",
    "lastName": "Doe",
    "gender": "U" 
}

Nous exécutons donc le code suivant :

C_OBJECT($oJSON;$oSchema;$oResult)
$oJSON :=JSON Parse(varJSON;*) // New * optional parameter
$oSchema
:=JSON Parse(varSchema)
$oResult
:=JSON Validate($oJSON;
$oSchema )

Remarque : lorsque vous validez un fichier JSON, vous souhaitez retrouver facilement la position de l’erreur dans le fichier d’origine. Nous avons donc ajouté un paramètre optionnel  » *  » à la commande JSON Parse. Dans ce cas, 4D ajoute les informations sur le numéro de ligne et la valeur de décalage pour chaque attribut.

Voici ce qui est renvoyé dans l’objet « $oResult » par la commande JSON Validate commande :

{
    "success": false,
    "errors": [
        {
            "jsonPath": "gender",
            "line": 4,
            "offset": 4,
            "code": 22,
            "msg": "Error while validating against 'enum' key. \"U\" does not match any enum element in the schema.",
            "schemaPaths": "properties.gender.enum"
        }
    ]
}

Note : L’implémentation dans la v16 R4 supporte cette version de la validation du schéma JSON.

Vanessa Talbot
- Product Owner -Vanessa Talbot a rejoint l'équipe du programme 4D en juin 2014. En tant que Product Owner, elle est chargée de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation des fonctionnalités livrées répond aux besoins des clients.Depuis son arrivée, elle a travaillé à la définition des fonctionnalités clés de 4D. Elle a travaillé sur la plupart des nouvelles fonctionnalités de multithreading préemptif et aussi sur un sujet très complexe : la nouvelle architecture pour les applications enginées. Vanessa est diplômée de Telecom Saint-Etienne. Elle a commencé sa carrière à l'Institut de Recherche Criminelle en tant que développeur pour le département audiovisuel. Elle a également travaillé dans les domaines des médias et du médical en tant qu'experte en support technique, en production ainsi qu'en documentation de nouvelles fonctionnalités.