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.
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.