0

この JSON ファイルは検証に失敗するはずですが、失敗しません。誰かが理由を教えてください。

以下の json データとスキーマをこの Web サイトにプラグインし、
http://json-schema-validator.herokuapp.com を検証すると、Mule Validate JSON Schema で同じ結果が得られます。明らかにスキーマに準拠していません(いくつかのフィールドを追加し、いくつかのフィールドのスペルを間違えました。日時の値は実際の日時ではありません)が、それでも失敗しません。誰かが理由を教えてもらえますか?

JSON スキーマ:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "http://hud.gov/ocio/xsd/esb/serviceauditingframework/2.0#",
  "definitions": {
    "serviceAuditLogData": {
      "type": "object",
      "title": "serviceAuditLogData",
      "required": [
        "serviceRequestTimestamp",
        "sourceSystem"
      ],
      "properties": {
        "auditId": {
          "type": "string"
        },
        "serviceRequestTimestamp": {
          "type": "string",
          "format": "date-time"
        },
        "serviceProvider": {
          "type": "string"
        },
        "serviceProviderVersion": {
          "type": "string"
        },
        "serviceProviderTimestamp": {
          "type": "string",
          "format": "date-time"
        },
        "eventType": {
          "type": "string"
        },
        "eventDetail": {
          "type": "string"
        },
        "hostName": {
          "type": "string"
        },
        "sourceSystem": {
          "type": "string"
        },
        "authenticationId": {
          "type": "string"
        },
        "endUserId": {
          "type": "string"
        },
        "inputData": {
          "type": "string"
        }
      },
      "propertiesOrder": [
        "auditId",
        "serviceRequestTimestamp",
        "serviceProvider",
        "serviceProviderVersion",
        "serviceProviderTimestamp",
        "eventType",
        "eventDetail",
        "hostName",
        "sourceSystem",
        "authenticationId",
        "endUserId",
        "inputData"
      ]
    }
  }
}

JSON データ

   {
      "serviceAuditLogData": {
        "junk":"asdfasdf",
        "serviceRequestTimestamp": "2004-09-29T12:58:31.470Z",
        "serviceProvider": "FLQS",
        "serviceProviderVersion": "v1.0.1",
        "audit_id": "17f24136-2494-4bf8-9d3b-9baafaae0cc9",
        "serviceProviderTimestamp": "2012-11-04T21:44:57.997Z",
        "eventType": "Query Pool",
        "eventDetail": "default pool",
        "hostName": "esb-d-srv1.",
        "sourceSystem": "LRS",
        "authenticationId": "EsbLrsAccount",
        "endUserId": "H574857",
        "inputData": "L234234234, L32453462345, L23452346"
      }
    }
4

2 に答える 2

1

スキーマが制約を適用しないため、失敗しません。検証を制約definitionsするキーワードではないことに注意してください。jsonschema通常、スキーマ定義の他の部分で再利用されるサブスキーマを配置するために使用されます。したがって、まず、 のdefinitionsキーワードを変更する必要がありますproperties

もう 1 つのよくある誤解は、キーワードjsonschemaに関するものです。properties次の例を見てみましょう。

{
    "type" : "object",
    "properties" : {
        "key1" : {
            "type" : "string"
        }
    }
}

次のように読むjson必要があります: オブジェクトである必要があり、 に等しいキーが含まれている場合key1、その値は文字列でなければなりません。それによると、次の 2 つの json オブジェクトが有効です。

{
    "key2":12
}

と:

{
    "key1":"sdf"
}

最後に、date-time形式に関連して、RFC3339 のセクション 6 をチェックして、有効な日時があることを確認する必要があります。jsonschemaいずれにせよ、フォーマットの実装はバリデータでは必須ではありません。

于 2016-03-07T14:29:03.773 に答える
0

@jruizaranguren に感謝します。また、"additionalProperties": false と "required": を配置して、API で渡されるものが期待どおりであることを確認する必要があることも学びました。

以下は私が私の問題をどのように解決したかです。

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "definitions": {
    "serviceAuditLogData": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "auditCorrelationId",
        "serviceRequestTimestamp",
        "serviceProvider",
        "serviceProviderVersion",
        "serviceProviderTimestamp",
        "eventType",
        "hostName",
        "sourceSystem",
        "authenticationId"
      ],
      "properties": {
        "auditCorrelationId": {
          "type": "string"
        },
        "serviceRequestTimestamp": {
          "type": "string",
          "format": "date-time"
        },
        "serviceProvider": {
          "type": "string"
        },
        "serviceProviderVersion": {
          "type": "string"
        },
        "serviceProviderTimestamp": {
          "type": "string",
          "format": "date-time"
        },
        "eventType": {
          "type": "string"
        },
        "eventDetail": {
          "type": "string"
        },
        "hostName": {
          "type": "string"
        },
        "sourceSystem": {
          "type": "string"
        },
        "authenticationId": {
          "type": "string"
        },
        "endUserId": {
          "type": "string"
        },
        "inputData": {
          "type": "string"
        }
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "serviceAuditLogData"
  ],
  "properties": {
    "serviceAuditLogData": {
      "$ref": "#/definitions/serviceAuditLogData"
    }
  }
}
于 2016-03-11T18:13:30.983 に答える