json 架构:我们可以在 "object" 中使用 "items"

json schema: Can we use "items" within an "object"

在我见过的大多数 json 架构示例中,关键字 "items" 似乎与 "array" 相关联。但是我尝试使用这个有用的工具将它与一个对象一起使用:http://www.jsonschemavalidator.net/ (JSON Schema Draft 4) 并且它有效。我找不到任何文件说明这是合法的,尽管我觉得它是正确的。

"value": { 
      "type": "object",
      "items": ...
}

这真的合法吗?

这是您要查找的文档。

Some validation keywords only apply to one or more primitive types. When the primitive type of the instance cannot be validated by a given keyword, validation for this keyword and instance SHOULD succeed.

为了说明这个概念,以这个模式为例。

{
  "items": { "type": "string" },
  "maxLength": 2,
  "required": ["foo"]
}

["foo"] 验证

  • items -> 通过
  • maxLength -> 忽略
  • required -> 忽略

{ "foo": "bar" } 验证

  • items -> 忽略
  • maxLength -> 忽略
  • required -> 通过

"foo" 不验证

  • items -> 忽略
  • maxLength -> 失败
  • required -> 忽略

3 验证

  • items -> 忽略
  • maxLength -> 忽略
  • required -> 忽略

虽然可以用这种方式编写模式,但建议不要在单个模式中混合类型关键字。您可以使用 anyOf 获得更易读的模式。

{
  "anyOf": [
    {
      "type": "string",
      "maxLength": 2
    },
    {
      "type": "array",
      "items": { "type": "string" }
    },
    {
      "type": "object",
      "required": "foo"
    }
  ]
}