2017-06-06 7 views
0

機能は次のようなものが見えますオブジェクトを返します。他のフィールドは 'vehicle_type'に基づいています。AJVスキーマ検証

など。

vehicle_type = 1の場合、「モデル」と「色」があります。

vehicle_type = 2の場合、 'engine_count'、 'seat_count'、 'wing_count'があります。

返されたオブジェクトを検証するために使用するJSONスキーマを記述しようとしています。

'vehicle_type'が1の場合、必要なプロパティとして 'model'と 'color'を設定したいと思います。 'vehicle_type'が2の場合は 'engine_count'、 'seat_count'と 'wing_count'が必要です。

私はAJV(https://github.com/epoberezkin/ajv)スキーマバリデータを使用しています。

vehicle_typeは 'answer'の内部にネストされており、必要なものとしてマークしたいプロパティは親オブジェクト上にあるため、問題があります。 つまり、 'validation_type'は 'model'または 'engine_count'と同じレベルにありません。

Iすでにいくつかの異なったが、私は運

任意のアイデアを持っていなかった近づいて...私も(/ ELSE /その後場合、スイッチ)AJV-キーワードで試してみましたか?

答えて

1

"oneOf"プロパティを使用できます。

車両タイプ1またはタイプ2のいずれかになります。タイプ1には一定の必須プロパティがあり、タイプ2には必要なプロパティが異なります。例えば

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "http://some.site.somewhere/entry-schema#", 
    "oneOf": [ 
    {"$ref": "#/definitions/type1"}, 
    {"$ref": "#/definitions/type2"} 
    ], 
    "definitions": { 
    "type1": { 
     "type": "object", 
     "properties": { 
     "answer": { 
      "type": "object", 
      "properties": { 
      "vehicle_type": { 
       "type": "integer", 
       "enum": [1] 
      }, 
      "message": { 
       "type": "string" 
      } 
      } 
     }, 
     "model": { 
      "type": "string" 
     }, 
     "color": { 
      "type": "string" 
     } 
     }, 
     "required": [ 
     "model", 
     "color" 
     ] 
    }, 
    "type2": { 
     "type": "object", 
     "properties": { 
     "answer": { 
      "type": "object", 
      "properties": { 
      "vehicle_type": { 
       "type": "integer", 
       "enum": [2] 
      }, 
      "message": { 
       "type": "string" 
      } 
      } 
     }, 
     "engine_count": { 
      "type": "integer" 
     }, 
     "seat_count": { 
      "type": "integer" 
     }, 
     "wing_count": { 
      "type": "integer" 
     } 
     }, 
     "required": [ 
     "engine_count", 
     "seat_count", 
     "wing_count" 
     ] 
    } 
    } 
} 
関連する問題