Geben Sie an, dass ein Wert eine Zeichenfolge oder eine Null mit dem JSON-Schema sein kann

73

Hoffentlich ist dies für andere nicht offensichtlich, da mir in den Dokumenten unter http://json-schema.org/ feinere Details fehlen. Ich erhalte einen JSON-Block mit einigen Eigenschaften, die null oder eine Zeichenfolge sein können. Wie legen Sie in einem JSON-Schema (das von der JsonSchema.ParseMethode von json.NET analysiert werden soll ) fest, dass ein Wert vom Typ null oder vom Typ string sein kann?

Gibt es etwas Einfaches, das mir fehlt, wie die Bereitstellung eines Arrays für den Typ? Zum Beispiel;

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

Hat jemand eine bessere Quelle für Details zum JSON-Schema als json-schema.org? Wo finde ich eine größere Auswahl an Beispielen? Ich möchte kein großes Dokument / keine große Spezifikation lesen, um etwas zu finden, das in einem Beispiel mit 10 Zeilen leicht demonstriert werden kann.

evanmcdonnal
quelle

Antworten:

103

Von http://json-schema.org/latest/json-schema-validation.html#anchor79

Der Wert dieses Schlüsselworts MUSS entweder eine Zeichenfolge oder ein Array sein. Wenn es sich um ein Array handelt, MÜSSEN Elemente des Arrays Zeichenfolgen und eindeutig sein.

Zeichenfolgenwerte MÜSSEN einer der sieben primitiven Typen sein, die in der Kernspezifikation definiert sind.

Dann verweisen wir auf Typen: http://json-schema.org/latest/json-schema-core.html#anchor8

Es listet String und Null auf. Versuchen:

"member_region": { "type": ["string", "null"] }
Explosionspillen
quelle
2
"string, null"funktioniert nicht, aber [ "string", "null" ]funktioniert.
Andrew Arnott
1
Es sieht so aus, als hätte jemand diese Antwort vor etwa einem Jahr geändert. Ich habe es wieder auf die richtige Antwort geändert.
Jason Desrosiers
60

Erweitern Sie die Antwort auf Explosion Pills, wenn Sie sich für die Array-Syntax entscheiden:

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

weil Sie einen Typ angeben, kein Beispiel / Wert. Sie sollten nicht gehen für:

 "member_region": { "type": [ "string", null ] } // this throws an exception
zardilior
quelle
2
Dies ist die einzige Lösung, die mit Schemas für Azure Logic Apps funktioniert.
EricksonG
4
Diese Lösung wird auch von Visual Studio Code erkannt.
ivosh