メインコンテンツまでスキップ
バージョン: 21 R4 BETA

JSON Validate

JSON Validate ( vJson : Object, Collection ; vSchema : Object ) : Object

引数型説明
vJsonObject, Collection→検証するJSONオブジェクトまたはコレクション
vSchemaObject→JSONオブジェクトの検証に使用するJSONスキーマ
戻り値Object←検証ステータスとエラー(該当する場合)
履歴
リリース内容
21 R2Support of JSON Schema draft 2020-12
16 R4Created

説明​

JSON Validate コマンドは、vJson のJSONコンテンツが vSchema のJSONスキーマで定義されたルールに準拠しているかを確認します。 JSONが無効な場合、コマンドはエラーの詳細を返します。

vJson には、検証するJSONコンテンツを含むJSONオブジェクトを渡します。

注: JSON文字列の検証では、JSONスキーマで定義されたルールに従っているかを確認します。これは、JSON Parse コマンドで行う、JSONの構文が正しいかどうかの確認とは異なります。

vSchema には、検証に使用するJSONスキーマを渡します。JSONスキーマの作成方法については、json-schema.org を参照してください。

サポートされるJSON Schema検証draft​

JSONオブジェクトの検証には、4Dは JSON Schema Validation draft document で定義された規格を使用します。これらのドキュメントは、これまでに複数のバージョンが公開されています。

4Dは次の2つのdraftバージョンをサポートしています:

  • バージョン2020-12 (推奨)。次の例外を除き、規格のすべての部分がサポートされています:
    • vocabulary
    • contentEncoding、contentMediaType、contentSchema (JSON以外のコンテンツの検証)
    • 参照について: $dynamicRef/$dynamicAnchor および https:... の参照
  • バージョン4 (従来の実装、デフォルトで使用)。この規格のサポートには、バージョン2020-12より多くの制限があります。

使用するバージョンの指定​

使用するバージョンは、スキーマの $schema キーで指定します:

  • バージョン2020-12:
"$schema": "https://json-schema.org/draft/2020-12/schema",
  • バージョン4:
"$schema": "http://json-schema.org/draft-04/schema#",

互換性のため、$schema キーが省略された場合はバージョン4が使用されます。ただし、より信頼性の高い検証を行うにはバージョン2020-12の使用をお勧めします。

注

$schema キーで別のスキーマバージョンを宣言すると、エラーが返されます。

検証結果​

JSONスキーマが無効な場合、4Dは Null オブジェクトを返し、エラー処理メソッドで捕捉できるエラーを生成します。

JSON Validate は検証ステータスを示すオブジェクトを返します。このオブジェクトには、次のプロパティが含まれることがあります:

プロパティ名型説明
successBooleanvJson が有効な場合はTrue、そうでない場合はfalseです。falseの場合、errors プロパティも返されます。
errorsObject collectionvJson が無効な場合のエラーオブジェクトの一覧です (下記参照)。

errors コレクション内の各エラーオブジェクトには、次のプロパティが含まれます:

プロパティ名型説明
codeNumberエラーコード
jsonPathTextvJson で検証できないJSONパス
lineNumberJSONファイル内のエラー行番号です。JSON Parse の * 引数を使用してJSONを解析した場合に設定されます。それ以外の場合、このプロパティは省略されます。
messageTextエラーメッセージ
offsetNumberJSONファイル内のエラー行のオフセットです。JSON Parse の * 引数を使用してJSONを解析した場合に設定されます。それ以外の場合、このプロパティは省略されます。
schemaPathsText検証エラーの原因となったスキーマ内のJSONパス

エラー一覧​

Details
次のエラーが返されることがあります:
コードJSONキーワードメッセージ
2multipleOf'multipleOf' キーに対する検証中にエラーが発生しました。
3maximum指定された値は、スキーマで指定された値 ("{s1}") を超えてはなりません。
4exclusiveMaximum指定された値は、スキーマで指定された値 ("{s1}") より小さくなければなりません。
5minimum指定された値は、スキーマで指定された値 ("{s1}") 未満であってはなりません。
6exclusiveMinimum指定された値は、スキーマで指定された値 ("{s1}") より大きくなければなりません。
7maxLength文字列がスキーマで指定された長さを超えています。
8minLength文字列がスキーマで指定された長さに達していません。
9pattern文字列 "{s1}" がスキーマ内のパターンに一致しません: {s2}。
10additionalItems配列の検証中にエラーが発生しました。JSONにスキーマで指定された数を超える要素が含まれています。
11maxItems配列にスキーマで指定された数を超える項目が含まれています。
12minItems配列にスキーマで指定された数の項目が含まれていません。
13uniqueItems配列の検証中にエラーが発生しました。要素が一意ではありません。"{s1}" の別のインスタンスがすでに配列に含まれています。
14maxPropertiesプロパティ数がスキーマで指定された上限を超えています。
15minPropertiesプロパティ数がスキーマで指定された下限を下回っています。
16required必須プロパティ "{s1}" がありません。
17additionalPropertiesスキーマでは追加プロパティが許可されていません。プロパティ {s1} を削除してください。
18dependenciesプロパティ "{s1}" にはプロパティ "{s2}" が必要です。
19enum'enum' キーに対する検証中にエラーが発生しました。"{s1}" はスキーマ内のどのenum要素にも一致しません。
20type型が正しくありません。期待される型: {s1}
21oneOfJSONが複数の値に一致します。
22oneOfJSONがどの値にも一致しません。
23notJSONが 'not' の値に対して無効です。
24format文字列が ("{s1}") に一致しません。
25const値 "{s1}" がスキーマの 'const' 値と一致しません。
26unevalutedProperties未評価のプロパティはスキーマで許可されていません。プロパティ {s1} を削除してください。
27unevalutedItems未評価の配列項目は許可されていません。インデックス {s1} の項目はどのスキーマでもカバーされていません。
28propertyNamesプロパティ名 "{s1}" が 'propertyNames' スキーマに適合しません。
29contains配列に 'contains' スキーマに一致する項目がありません。
30contains配列には 'contains' スキーマに一致する項目が少なくとも{s1}個必要ですが、{s2}個しか見つかりませんでした。
31contains配列に含められる 'contains' スキーマに一致する項目は最大{s1}個ですが、{s2}個見つかりました。
32requiredプロパティ "{s1}" にはプロパティ "{s2}" が必要です。
35prefixItems配列の先頭の項目が 'prefixItems' スキーマに一致しません。
36dependentSchemas'dependentSchemas' に対する検証に失敗しました。
37$ref参照を解決できませんでした。
38$ref循環参照が検出されました。

例題​

スキーマを使用してJSONオブジェクトを検証し、検証エラーがあればその一覧を取得して、エラー行とメッセージをテキスト変数に格納します:

 var $oResult : Object
 $oResult:=JSON Validate(JSON Parse(myJson;*);mySchema)
 If($oResult.success) //validation successful
    ...
 Else //validation failed
    var $vLNbErr : Integer
    var $vTerrLine : Text
    $vLNbErr:=$oResult.errors.length ///get the number of error(s)
    ALERT(String($vLNbErr)+" validation error(s) found.")
    For($i;0;$vLNbErr)
       $vTerrLine:=$vTerrLine+$oResult.errors[$i].message+" "+String($oResult.errors[$i].line)+Carriage return
    End for
 End if

参照​

JSON Parse

プロパティ​

コマンド番号1456
スレッドセーフ◯