如何使用JSON Schema验证器验证可无效的类型



我正在使用play-json-schema-validator,并希望与Scala设置集成测试,以检查API的JSON响应架构。

响应的某些字段是无效的,我想对此进行验证。因此,某些字段可以是字符串或零字段,但永远不能是数字。

在操场上玩耍,我想验证一个对象数组,每个对象的 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]
      }
    }
  }
}

然而,尽管它验证了字符串和无效案例,但我现在对数字呈误报。我期望这个JSON有错误,但它验证了:

[
  {
    "name": "Red anger"
  },
  {
    "name": null
  },
  {
    "name": 13
  }
]

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

在架构中唤起零:

"type": ["string", "null"]

您可以在JSON Schema验证文档,即:

中阅读有关此信息。

6.1。任何实例类型的验证关键字

6.1.1。类型

此关键字的值必须是字符串或数组。如果是数组,则数组的元素必须是字符串,并且 必须是唯一的。

字符串值必须是六种原始类型之一(" null", "布尔","对象","数组","数字"或"字符串")或"整数" 与任何数字与零分部分匹配。

一个实例验证了及其及时仅当实例在任何一个 此关键字列出的集合。

该模式的类型属性不接受数组,而是当时只有单个类型:"字符串"," null" ... ,正如您指出的那样,类型应该是字符串,因此而不是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"}
        ]
      }
    }
  }
}

最新更新