0

这个问题的另一个标题是“必需的属性组合”。

假设我正在使用这样的 json 模式:

{
  "$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"
  ],
   // ... 
}

我想做的是使“列表”、“包”、“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"]
    }
  ],
}

这可能吗?

4

1 回答 1

3

JSON Schema 中有四个布尔组合关键字:

  • 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"] }
  ]
}
于 2018-08-13T03:15:34.147 回答