Validieren Sie Ihr JSON-Objekt

Automatisch übersetzt von Deepl

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.

Beispiel Datenbank

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.

Vanessa Talbot
Product Owner - Vanessa Talbot kam im Juni 2014 zum 4D Programmteam. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Seit ihrer Ankunft hat sie an der Definition der wichtigsten Funktionen in 4D gearbeitet. Sie hat an den meisten der neuen Funktionen für präemptives Multi-Threading gearbeitet und auch an einem sehr komplexen Thema: der neuen Architektur für erstellte Anwendungen. Vanessa hat einen Abschluss von der Telecom Saint-Etienne. Sie begann ihre Karriere am Criminal Research Institute als Entwicklerin für die audiovisuelle Abteilung. Sie hat auch in den Bereichen Medien und Medizin als Expertin für technischen Support, Produktion und die Dokumentation neuer Funktionen gearbeitet.