如何使用 json 模式验证器验证可为空类型?

k0p*_*kus 6 null json scala playframework json-schema-validator

我正在使用play-json-schema-validator并希望使用 scala 设置集成测试以检查 API 的 JSON 响应模式。

响应的某些字段可以为空,我想对此进行验证。所以某些字段可以是字符串或空值,但它永远不能是数字。

在它的操场上玩耍我想验证一个对象数组,每个对象的name属性是字符串或空值。

我想出了这个模式:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Product set",
  "type": "array",
  "items": {
    "title": "Product",
    "type": "object",
    "properties": {
      "name": {
        "type": ["string", null]
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,尽管它验证了字符串和 null 大小写,但我现在得到了数字的误报。我期待这个 json 出现错误,但它验证了:

[
  {
    "name": "Red anger"
  },
  {
    "name": null
  },
  {
    "name": 13
  }
]
Run Code Online (Sandbox Code Playgroud)

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

k0p*_*kus 7

引用架构中的空值:

"type": ["string", "null"]
Run Code Online (Sandbox Code Playgroud)

您可以在json 模式验证文档中阅读有关内容,即:

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

6.1.1. 类型

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

字符串值必须是六种基本类型之一(“null”、“boolean”、“object”、“array”、“number”或“string”),或匹配任何小数部分为零的数字的“整数” .

当且仅当实例位于为此关键字列出的任何集合中时,实例才进行验证。