私たちは、ますますJSON形式を使うようになっています。例えば、設定をファイルに保存したり、ソフトウェアの設定を保存したり、ウェブ上で他のサーバーとクライアントデータを交換したりするためです。
受信したデータが期待通りの形式であることを、どのように検証すればよいのでしょうか。 必要な情報がすべて実際に存在することを、どのように検証すればよいのでしょうか? JSON形式の種類ごとに面倒なメソッドを書かずに、この検証を行うにはどうしたらよいでしょうか?
単にJSONスキーマを記述して JSON Validatenewコマンド!
前文
すでにご存知かもしれませんが、「Well Formed」なXML文書と「Valid」なXML文書には違いがあります。正しい構文を持つXML文書を「Well Formed」と呼び、DTDに対して検証されたXML文書は「Well Formed」かつ「Valid」です。JSON文書でも同じことができる。JSON文書を記述するために、JSONスキーマを記述することができます。JSONスキーマの文法や構文については、公式サイト
(http://json-schema.org/)を参照してほしい。
JSON Validateコマンド
を使えば JSON Parseコマンドを使えば、JSONドキュメントが「Well Formed」であることをすでにチェックすることができます。4D v16 R4から、この JSON Validateコマンドを使用すると、JSONドキュメントがJSONスキーマに従って「有効」であるかどうかを確認することができます。
新しい JSON Validateコマンドは、オブジェクトを返します。このオブジェクトの “success “属性は、ブール値で、その値は、ドキュメントが有効な場合は真、パラメータで渡されたJSONスキーマに対して無効な場合はfalse となります。errors” 属性はオブジェクトの配列で、エラー箇所を把握するための情報をすべて含んでいます。
コード例
例えば、次のようなvarSchema JSONスキーマを使用します。
{ "$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"] }
次のvarJSON JSON文書が有効かどうかをチェックしたい。
{ "firstName": "John", "lastName": "Doe", "gender": "U" }
そこで、以下のコードを実行する。
C_OBJECT($oJSON;$oSchema;$oResult)
$oJSON :=JSON Parse(varJSON;*)// New * optional parameter
$oSchema :=JSON Parse(varSchema)
$oResult:=JSON Validate($oJSON;$oSchema )
注:JSONファイルを検証する場合、元のファイルのエラー位置を簡単に取得したいものです。そこで、JSON Parse のコマンドに、オプションで ” * ” パラメータを追加しました。この場合、4Dは各属性の行番号とオフセット値に関する情報を追加します。
以下は、以下のコマンドで “$oResult” オブジェクトに返される内容です。 JSON Validateコマンドによって ” ” オブジェクトに返される内容です。
{ "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" } ] }
注:v16 R4の実装では、このバージョンのJSONスキーマの検証をサポートしています。