私たちは、ますます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スキーマの検証をサポートしています。
