Aller au contenu principal
Version : 21 R4 BETA

JSON Validate

JSON Validate ( vJson : Object, Collection ; vSchema : Object ) : Object

ParamètreTypeDescription
vJsonObject, Collection→Objet ou collection JSON à valider
vSchemaObject→Schéma JSON utilisé pour valider les objets JSON
RésultatObject←Statut de la validation et erreurs (éventuellement)
Historique
VersionChangements
21 R2Prise en charge de JSON Schema draft 2020-12
16 R4Créé

Description​

La commande JSON Validate vérifie la conformité du contenu JSON de vJson avec les règles définies dans le schéma JSON vSchema. Si le JSON n'est pas valide, la commande renvoie une description détaillée des erreurs.

Dans vJson, passez un objet JSON contenant le contenu JSON à valider.

Note : Valider une chaîne JSON consiste à vérifier qu'elle respecte les règles définies dans un schéma JSON. Cela diffère de la vérification de la syntaxe JSON, effectuée par la commande JSON Parse.

Dans vSchema, passez le schéma JSON à utiliser pour la validation. Pour plus d'informations sur la création d'un schéma JSON, consultez le site json-schema.org.

Drafts de validation JSON Schema pris en charge​

Pour valider un objet JSON, 4D utilise la norme décrite dans un document JSON Schema Validation draft. Plusieurs versions de ces documents ont été publiées au fil du temps.

4D prend en charge deux versions du draft :

  • version 2020-12 (recommandée). Toutes les parties de la norme sont prises en charge, à l'exception de :
    • vocabulary
    • contentEncoding, contentMediaType et contentSchema (validation de contenu non JSON)
    • pour les références : $dynamicRef/$dynamicAnchor et les références en https:...
  • version 4 (implémentation historique, utilisée par défaut). Cette version comporte davantage de limitations que la version 2020-12.

Spécifier la version à utiliser​

La version à utiliser doit être indiquée dans le schéma avec la clé $schema :

  • version 2020-12 :
"$schema": "https://json-schema.org/draft/2020-12/schema",
  • version 4 :
"$schema": "http://json-schema.org/draft-04/schema#",

Pour des raisons de compatibilité, la version 4 est utilisée si la clé $schema est omise. Il est toutefois recommandé d'utiliser la version 2020-12, qui fournit les contrôles les plus fiables.

note

Si vous déclarez une autre version du schéma avec la clé $schema, une erreur est renvoyée.

Résultat de la validation​

Si le schéma JSON n'est pas valide, 4D renvoie un objet Null et génère une erreur qui peut être interceptée par une méthode de gestion des erreurs.

La commande JSON Validate renvoie un objet qui indique le statut de la validation. Cet objet peut contenir les propriétés suivantes :

Nom de la propriétéTypeDescription
successBooléenVrai si vJson est valide, faux sinon. Si la valeur est fausse, la propriété errors est également renvoyée.
errorsCollection d'objetsListe des objets erreur si vJson n'est pas valide (voir ci-dessous).

Chaque objet erreur de la collection errors contient les propriétés suivantes :

Nom de la propriétéTypeDescription
codeNombreCode d'erreur
jsonPathChaîneChemin JSON qui ne peut pas être validé dans vJson
lineNombreNuméro de ligne de l'erreur dans le fichier JSON. Cette propriété est renseignée si le JSON a été analysé avec le paramètre * de JSON Parse. Sinon, elle est omise.
messageChaîneMessage d'erreur
offsetNombreDécalage de ligne de l'erreur dans le fichier JSON. Cette propriété est renseignée si le JSON a été analysé avec le paramètre * de JSON Parse. Sinon, elle est omise.
schemaPathsChaîneChemin JSON dans le schéma à l'origine de l'erreur de validation

Liste des erreurs​

Details
Les erreurs suivantes peuvent être renvoyées :
CodeMot-clé JSONMessage
2multipleOfErreur lors de la validation de la clé 'multipleOf'.
3maximumLa valeur ne doit pas être supérieure à celle spécifiée dans le schéma ("{s1}").
4exclusiveMaximumLa valeur doit être inférieure à celle spécifiée dans le schéma ("{s1}").
5minimumLa valeur ne doit pas être inférieure à celle spécifiée dans le schéma ("{s1}").
6exclusiveMinimumLa valeur doit être supérieure à celle spécifiée dans le schéma ("{s1}").
7maxLengthLa chaîne est plus longue que la limite spécifiée dans le schéma.
8minLengthLa chaîne est plus courte que la limite spécifiée dans le schéma.
9patternLa chaîne "{s1}" ne correspond pas au modèle du schéma : {s2}.
10additionalItemsErreur lors de la validation d'un tableau. Le JSON contient plus d'éléments que la limite spécifiée dans le schéma.
11maxItemsLe tableau contient plus d'éléments que la limite spécifiée dans le schéma.
12minItemsLe tableau contient moins d'éléments que la limite spécifiée dans le schéma.
13uniqueItemsErreur lors de la validation d'un tableau. Les éléments ne sont pas uniques. Une autre instance de "{s1}" figure déjà dans le tableau.
14maxPropertiesLe nombre de propriétés dépasse la limite spécifiée dans le schéma.
15minPropertiesLe nombre de propriétés est inférieur à la limite spécifiée dans le schéma.
16requiredLa propriété obligatoire "{s1}" est manquante.
17additionalPropertiesLe schéma n'autorise aucune propriété supplémentaire. Supprimez la ou les propriétés {s1}.
18dependenciesLa propriété "{s1}" nécessite la propriété "{s2}".
19enumErreur lors de la validation de la clé 'enum'. La valeur "{s1}" ne correspond à aucun élément enum du schéma.
20typeType incorrect. Le type attendu est : {s1}.
21oneOfLe JSON correspond à plusieurs valeurs.
22oneOfLe JSON ne correspond à aucune valeur.
23notLe JSON n'est pas valide par rapport à la valeur de 'not'.
24formatLa chaîne ne correspond pas à ("{s1}").
25constLa valeur "{s1}" ne correspond pas à la valeur 'const' du schéma.
26unevalutedPropertiesLe schéma n'autorise pas les propriétés non évaluées. Supprimez la ou les propriétés {s1}.
27unevalutedItemsLes éléments de tableau non évalués ne sont pas autorisés. L'élément à l'index {s1} n'est couvert par aucun schéma.
28propertyNamesLe nom de propriété "{s1}" n'est pas valide selon le schéma 'propertyNames'.
29containsLe tableau ne contient aucun élément correspondant au schéma 'contains'.
30containsLe tableau doit contenir au moins {s1} éléments correspondant au schéma 'contains', mais seuls {s2} ont été trouvés.
31containsLe tableau doit contenir au plus {s1} éléments correspondant au schéma 'contains', mais {s2} ont été trouvés.
32requiredLa propriété "{s1}" nécessite la présence de la propriété "{s2}".
35prefixItemsLes premiers éléments du tableau ne correspondent pas aux schémas 'prefixItems'.
36dependentSchemasLa validation de 'dependentSchemas' a échoué.
37$refLa référence n'a pas pu être résolue.
38$refUne référence circulaire a été détectée.

Exemple​

Vous souhaitez valider un objet JSON avec un schéma, obtenir la liste des erreurs éventuelles et stocker les lignes et les messages d'erreur dans une variable texte :

 var $oResult : Object
 $oResult:=JSON Validate(JSON Parse(myJson;*);mySchema)
 If($oResult.success)  //la validation a réussi
         //...
 Else  //la validation a échoué
       var $vLNbErr : Integer
       var $vTerrLine : Text
       $vLNbErr:=$oResult.errors.length  //obtenir le nombre d'erreurs
       ALERT(String($vLNbErr)+" validation error(s) found.")
       For($i;0;$vLNbErr)
          $vTerrLine:=$vTerrLine+$oResult.errors[$i].message+" "+String($oResult.errors[$i].line)+Retour chariot
       End for
 End if

Voir aussi​

JSON Parse

Propriétés​

Numéro de commande1456
Thread safeyes