Ověření objektu JSON

Automaticky přeloženo z Deepl

Stále častěji používáme formát JSON. Například k ukládání nastavení do souboru, k ukládání konfigurace softwaru nebo k výměně klientských dat na webu s jinými servery.

Jak lze ověřit, že přijatá data jsou v očekávaném formátu? Jak můžete ověřit, že jsou skutečně přítomny všechny potřebné informace? Jak můžete tuto validaci provést, aniž byste museli pro každý typ formátu JSON psát únavnou metodu?

Stačí napsat schéma JSON a použít příkaz JSON Validate příkaz new!

Předmluva
Jak už možná víte, existuje rozdíl mezi „dobře zformovaným“ dokumentem XML a „validním“ dokumentem XML. Dokument XML se správnou syntaxí se nazývá „Well Formed“ a dokument XML validovaný podle DTD je „Well Formed“ i „Valid“.
Stejně můžete postupovat i u dokumentů JSON. Můžete napsat schéma JSON, které popisuje dokument JSON. Chcete-li znát gramatiku a syntaxi schématu JSON, doporučuji vám navštívit oficiální stránky: http: //json-schema.org/.

Příkaz JSON Validate

S JSON Parse příkazu již můžete zkontrolovat, zda je dokument JSON„dobře zformovaný“. Od verze 4D v16 R4 se JSON Validate příkaz umožňuje ověřit, zda je dokument JSON„Validní“ podle vašeho schématu JSON.

Příklad databáze

Nový JSON Validate vrací objekt. V tomto objektu je atribut „success“ boolean, jeho hodnota je true, pokud je dokument platný, a false, pokud je dokument neplatný vůči schématu JSON předanému v parametru. Atribut „errors“ je pole objektů se všemi informacemi pro pochopení a nalezení místa chyby.

Příklad kódu

Pro příklad použijeme následující schéma JSON varSchema:

{
     "$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"]
 }

Chceme zkontrolovat, zda je následující dokument varJSON JSON platný:

{
    "firstName": "John",
    "lastName": "Doe",
    "gender": "U" 
}

Provedeme tedy následující kód:

C_OBJECT($oJSON;$oSchema;$oResult)
$oJSON :=JSON Parse(varJSON;*) // New * optional parameter
$oSchema
:=JSON Parse(varSchema)
$oResult
:=JSON Validate($oJSON;
$oSchema )

Poznámka: při validaci souboru JSON chcete snadno načíst chybovou pozici v původním souboru. Proto jsme do příkazu JSON Parse přidali nepovinný parametr “ * „. V tomto případě 4D přidá informaci o čísle řádku a hodnotě offsetu pro každý atribut.

Níže je uvedeno, co je vráceno v objektu „$oResult“ příkazem JSON Validate příkaz:

{
    "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"
        }
    ]
}

Poznámka: Implementace ve verzi v16 R4 podporuje tuto verzi validace schématu JSON.

Vanessa Talbot
• Product Owner • Vanessa Talbot se připojila k programovému týmu 4D v červnu 2014. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací. Její úlohou je také zajistit, aby implementovaná funkce odpovídala potřebám zákazníka. Od svého příchodu pracovala na definování klíčových prvků ve 4D. Pracovala na většině nových funkcí preemptivního multi-threadingu a také na velmi složitém tématu: nové architektuře pro enginované aplikace. Vanessa má titul z Telecom Saint-Etienne. Svou kariéru začala ve Výzkumném ústavu kriminalistickém jako vývojářka pro audiovizuální oddělení. Působila také v mediální a lékařské oblasti jako expertka na technickou podporu, produkci i dokumentaci novinek.