JSON Schema - 需要所有属性

Ada*_*tan 29 jsonschema

requiredJSON Schema中的字段

JSON模式的特点properties,requiredadditionalProperties领域.例如,

{
    "type": "object",
    "properties": {
        "elephant": {"type": "string"},
        "giraffe": {"type": "string"},
        "polarBear": {"type": "string"}
    },
    "required": [
        "elephant",
        "giraffe",
        "polarBear"
    ],
    "additionalProperties": false
}
Run Code Online (Sandbox Code Playgroud)

将验证JSON对象,如:

{
    "elephant": "Johnny",
    "giraffe": "Jimmy",
    "polarBear": "George"
}
Run Code Online (Sandbox Code Playgroud)

但如果属性列表不完全, 则会失败elephant, giraffe, polarBear.

问题

我经常将列表复制粘贴properties到列表中required,并且由于拼写错误和其他愚蠢错误而导致列表不匹配时会遇到恼人的错误.

是否有更短的方法来表示所有属性都是必需的,而没有明确命名它们?

San*_*Jay 32

您可以使用"minProperties"属性而不是明确命名所有字段.

{
    "type": "object",
    "properties": {
        "elephant": {"type": "string"},
        "giraffe": {"type": "string"},
        "polarBear": {"type": "string"}
    },
    "additionalProperties": false,
    "minProperties": 3
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这很有效.但要注意的一点是它依赖于`"additionalProperties"的规范:false`如果additionalProperties通过规范或默认情况(如果未指定)为真,那么minProperties约束可以通过_not_的附加属性来满足架构对象中指定的一个. (5认同)
  • 这种方式错误消息不太有用.你知道你错过了一处房产,但必须弄明白哪一处房产.不过,每次都要复制所有属性. (3认同)

jru*_*ren 8

我怀疑除了在必需的数组中明确命名它们之外,还有一种方法可以指定必需的属性.

但是,如果您经常遇到此问题,我建议您编写一个小脚本,对您的json架构进行后处理,并自动为所有已定义的对象添加所需的数组.

该脚本只需要遍历json-schema树,并且在每个级别,如果找到"properties"关键字,则添加"required"关键字,其中包含属性在同一级别的所有已定义键.

让机器完成钻孔.