Wir verwenden mehr und mehr das JSON-Format. Zum Beispiel, um Einstellungen in einer Datei zu speichern, um Softwarekonfigurationen zu speichern oder um Client-Daten über das Web mit anderen Servern auszutauschen.
Wie können Sie überprüfen, ob die empfangenen Daten das erwartete Format haben? Wie können Sie überprüfen, ob alle erforderlichen Informationen tatsächlich vorhanden sind? Wie kann man diese Validierung durchführen, ohne für jede Art von JSON-Format eine lästige Methode zu schreiben?
Schreiben Sie einfach ein JSON-Schema und verwenden Sie den JSON Validate neuen Befehl!
Präambel
Wie Sie vielleicht schon wissen, gibt es einen Unterschied zwischen einem „wohlgeformten“ XML-Dokument und einem „gültigen“ XML-Dokument. Ein XML-Dokument mit korrekter Syntax wird als „wohlgeformt“ bezeichnet, und ein anhand einer DTD validiertes XML-Dokument ist sowohl „wohlgeformt“ als auch „gültig“.
Dasselbe können Sie mit JSON-Dokumenten tun. Sie können ein JSON-Schema schreiben, um Ihr JSON-Dokument zu beschreiben. Um die Grammatik und die Syntax des JSON-Schemas kennenzulernen, empfehle ich Ihnen, die offizielle Website http://json-schema.org/ zu besuchen.
Befehl JSON Validate
Mit dem JSON Parse Befehl können Sie bereits prüfen, ob das JSON Dokument„Well Formed“ ist. Seit 4D v16 R4 ermöglicht der JSON Validate Befehl können Sie überprüfen, ob das JSON Dokument gemäß Ihrem JSON Schema„Valid“ ist.
Der neue JSON Validate Befehl gibt ein Objekt zurück. In diesem Objekt ist das „success“-Attribut ein boolescher Wert, dessen Wert wahr ist, wenn das Dokument gültig ist, und false, wenn das Dokument ungültig ist im Vergleich zu dem im Parameter übergebenen JSON-Schema. Das Attribut „errors“ ist ein Objekt-Array mit allen Informationen, um den Fehler zu verstehen und herauszufinden, wo er liegt.
Code-Beispiel
Wir verwenden zum Beispiel das folgende varSchema JSON-Schema:
{ "$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"] }
Wir wollen prüfen, ob das folgende varJSON JSON-Dokument gültig ist:
{ "firstName": "John", "lastName": "Doe", "gender": "U" }
Wir führen also den folgenden Code aus:
C_OBJECT($oJSON;$oSchema;$oResult)
$oJSON :=JSON Parse(varJSON;*) // New * optional parameter
$oSchema :=JSON Parse(varSchema)
$oResult:=JSON Validate($oJSON;$oSchema )
Hinweis: Wenn Sie eine JSON-Datei validieren, möchten Sie die Fehlerposition in der Originaldatei leicht abrufen können. Daher haben wir dem Befehl JSON Parse einen optionalen Parameter “ * “ hinzugefügt. In diesem Fall fügt 4D die Informationen über die Zeilennummer und den Offset-Wert für jedes Attribut hinzu.
Nachfolgend ist aufgeführt, was in dem Objekt „$oResult“ von dem JSON Validate Befehl:
{ "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" } ] }
Hinweis: Die Implementierung in v16 R4 unterstützt diese Version der JSON-Schema-Validierung.