如何使用json schema验证器验证可空类型?

时间:2017-12-01 11:11:18

标签: json scala playframework null json-schema-validator

我正在使用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
  }
]

如何使用模式验证器将类型的字段声明为可空?

2 个答案:

答案 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”   它匹配任何数字与零小数部分。

     

实例验证当且是否该实例位于任何实例中   为此关键字列出的集合。