json-schema - 允许在必需的属性中使用 logical-OR

json-schema - allow for logical-OR in required properties

这个问题的替代标题是 "required property combinations"。

假设我正在使用 json-schema 像这样:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "JSON schema for NLU (npm-link-up) library.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "list", "packages", "deps"
  ],
   // ... 
}

我想做的是,将 "list"、"packages"、"deps" 中的一项作为必需项。那是一个,但应该不超过一个。

所以它可能是这样的:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "JSON schema for NLU (npm-link-up) library.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    {
      "min": 1,
      "max": 1,
      "selection":  ["list", "packages", "deps"]
    }
  ],
}

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "JSON schema for NLU (npm-link-up) library.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    {
      "operator": "or",
      "selection": ["list", "packages", "deps"]
    }
  ],
}

这可能吗?

JSON 架构中有四个布尔组合器关键字:

  • allOf - 和
  • anyOf - 或者
  • oneOf - XOR(异或)
  • not - 不是

你想要的可以这样实现...

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "JSON schema for NLU (npm-link-up) library.",
  "type": "object",
  "additionalProperties": false,
  "oneOf": [
    { "required": ["list"] },
    { "required": ["packages"] },
    { "required": ["deps"] }
  ]
}