2016-05-23 5 views
0

私はこのような私のAPIのJSONレスポンスを検証する:jsonschemaでこの検証要件を記述する方法は?

{ 
    "code": 0, 
    "results": [ 
    {"type":1, "abc": 123}, 
    {"type":2, "def": 456} 
    ] 
} 

そのタイプがあるとき、私はそのタイプが1のとき、「ABC」フィールドを持つように結果内のオブジェクトを検証すると、「DEF」フィールド2.結果には、任意の数のtype1およびtype2オブジェクトが含まれている可能性があります。

jsonschemaでこれを指定できますか?または、resultsの要素に汎用バリデータを使用し、自分で検証する必要がありますか?

答えて

1

キーワードanyOfを使用してこれを行うことができます。

インスタンスは、このキーワードの値で定義された少なくとも1つのスキーマに対して正常に検証された場合、このキーワードに対して正常に検証されます。

http://json-schema.org/latest/json-schema-validation.html#anchor85

あなたはアイテムの両方のタイプを定義し、「結果」の配列項目を記述するためにanyOfを使用する必要があります。

{ 
    "type": "object", 
    "properties": { 
    "code": { "type": "integer" }, 
    "results": { 
     "type": "array", 
     "items": { "$ref": "#/definitions/resultItems" } 
    } 
    }, 
    "definitions": { 
    "resultItems": { 
     "type": "object", 
     "anyOf": [ 
     { "$ref": "#/definitions/type1" }, 
     { "$ref": "#/definitions/type2" } 
     ] 
    }, 
    "type1": { 
     "properties": { 
     "type": { "enum": [1] }, 
     "abc": { "type": "integer" } 
     }, 
     "required": ["abc"] 
    }, 
    "type2": { 
     "properties": { 
     "type": { "enum": [2] }, 
     "def": { "type": "integer" } 
     }, 
     "required": ["def"] 
    } 
    } 
} 
関連する問題