JSONオブジェクトを検証する

Deeplからの自動翻訳

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

Vanessa Talbot
- プロダクトオーナー - Vanessa Talbotは、2014年6月に4Dプログラムチームに参加しました。プロダクトオーナーとして、彼女はユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換する役割を担っています。また彼女の役割は、実装された機能が顧客のニーズを満たしているかどうかを確認することでもあります。入社以来、4Dにおける主要機能の定義に関わってきました。プリエンプティブ/マルチスレッドの新機能の大部分と、非常に複雑なテーマである組み込みアプリケーションの新アーキテクチャに取り組んできました。VanessaはTelecom Saint-Etienneで学位を取得後、Criminal Research Institute でオーディオビジュアル部門の開発者としてキャリアをスタートさせました。また、メディアや医療の分野でも、技術サポートやプロダクションの分野で働いてきました。