126 votes

Spécifier une valeur peut être une chaîne de caractères ou null avec JSON Schema

J'espère que ce n'est pas évident pour d'autres, car je trouve les documents à l'adresse suivante https://json-schema.org/ pour manquer de détails plus fins. J'obtiens un bloc de JSON avec quelques propriétés qui peuvent être null ou un string . Comment spécifier, dans un schéma JSON (qui sera analysé par l'outil Json.NET) JsonSchema.Parse ), qu'une valeur peut être de type null ou tapez string ?

Y a-t-il quelque chose de simple qui m'échappe, comme fournir un tableau pour le type ? Par exemple ;

"member_region": { "type": [ "string", null ] } // this throws an exception

Par ailleurs, quelqu'un connaît-il une meilleure source de détails sur le schéma JSON que json-schema.org ? Où puis-je trouver une plus grande sélection d'exemples ? Je ne veux pas lire un gros document/spécification pour trouver quelque chose qui peut facilement être démontré dans un exemple de 10 lignes.

180voto

Explosion Pills Points 89756

De https://json-schema.org/understanding-json-schema/reference/type.html

El type peut être soit une chaîne, soit un tableau :

  • Si c'est une chaîne de caractères, c'est le nom d'un des types de base ci-dessus.
  • Si c'est un tableau, il doit être un tableau de chaînes de caractères où chaque chaîne est le nom de l'un des types de base, et chaque élément est unique. Dans ce cas, l'extrait JSON est valide s'il correspond à tout des types donnés

La même page énumère également les noms des types de données définis, notamment string y null .

Essayez :

"member_region": { "type": ["string", "null"] }

78voto

zardilior Points 374

Prolonger la réponse de Explosion Pills si vous optez pour la syntaxe du tableau :

"member_region": { "type": [ "string", "null" ] } // this works

parce que vous indiquez un type, et non un exemple/une valeur. Vous ne devriez pas choisir :

 "member_region": { "type": [ "string", null ] } // this throws an exception

-2voto

TheWizardOfTN Points 87

["string", "null"] fonctionnera si vous n'utilisez pas un modèle RegEx.

J'utilise un validateur de champ de date :

    (0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d 

pour autoriser un motif MM/dd/yyyy, mais une chaîne vide ("") entraînera une erreur de non correspondance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X