我想像这样验证我的API json响应:
{
"code": 0,
"results": [
{"type":1, "abc": 123},
{"type":2, "def": 456}
]
}
我想验证结果中的对象是否有" abc"字段的类型为1," def"类型为2时的字段。结果可能包含任意数量的type1和type2对象。
我可以在jsonschema中指定吗?或者我必须为results
中的元素使用通用验证器并自己进行验证吗?
答案 0 :(得分:1)
您可以使用anyOf
关键字执行此操作。
如果针对此关键字的值定义的至少一个架构成功验证,则实例会针对此关键字成功验证。
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"]
}
}
}