我正在使用play-json-schema-validator并想要使用scala设置集成测试,以便检查API的JSON响应架构。
响应的某些字段可以为空,我想验证它。因此,某些字段可以是字符串或null,但它永远不能是数字。
在its playground上玩游戏我想验证一个对象数组,每个对象的name
属性都是字符串或null。
我想出了这个架构:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Product set",
"type": "array",
"items": {
"title": "Product",
"type": "object",
"properties": {
"name": {
"type": ["string", null]
}
}
}
}
然而,虽然它验证了字符串和null的情况,但我现在得到了数字的误报。我期待这个json有一个错误,但它验证了:
[
{
"name": "Red anger"
},
{
"name": null
},
{
"name": 13
}
]
如何使用模式验证器将类型的字段声明为可空?
答案 0 :(得分:1)
架构的type属性不接受数组,但当时只接受一种类型: "字符串"," null" ... 正如您所指出的那样,类型应该是字符串,而不是null => "空"
如果要检查单个字段的多种类型,则需要使用
anyOf,oneOf,allOf
以下是使用输入
的示例{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Product set",
"type": "array",
"items": {
"title": "Product",
"type": "object",
"properties": {
"name": {
"anyOf": [
{"type":"string"},
{"type":"null"},
{"type":"number"}
]
}
}
}
}
答案 1 :(得分:0)
在架构中引用null:
"type": ["string", "null"]
您可以在json schema validation documentation中阅读,即:
6.1。任何实例类型的验证关键字
6.1.1。输入
此关键字的值必须是字符串或数组。如果它是一个数组,那么数组的元素必须是字符串和 必须是独一无二的。
字符串值必须是六种基本类型之一(“null”, “boolean”,“object”,“array”,“number”或“string”)或“integer” 它匹配任何数字与零小数部分。
实例验证当且是否该实例位于任何实例中 为此关键字列出的集合。