如何使用 JSON 架构在数组中制作所需的项目?

How to make items required in an array using JSON Schema?

我有一个字符串数组,但我不知道是否可以为它设置必需项。

对于“type”:“object”,它可以设置“required”来使项目成为必需的,但我不知道如何设置字符串数组。

这是我的 json 示例:

{
  "sets": ["B", "A", "C", "_A", "Y", "_B"]
}

需要“A”、“B”、“C”,
"X", "Y", "Z" 可选,
任何以“_”开头的项目也是可选的,
所有项目都是独一无二的。
拒绝所有其他不符合此规则的项目。


这是我的 json 架构,但我不知道如何为这个数组设置必需的项目。

{
    "type": "object",
    "properties": {
      "sets": {
        "type": "array",
        "items": {
          "type": "string",
          "oneOf": [
            {"enum": ["A", "B", "C", "X", "Y", "Z"]},
            {"pattern": "^_"}
          ]
        },
        "uniqueItems": true
      }
    }
}

希望你能看懂我的英文,如果你需要更多信息或更好的标题,请告诉我,谢谢!

这是一个非常有趣且复杂的需求,但有一个解决方案。它有一些重复,但我不确定是否有替代方法。

您需要确保 A、B 和 C 在数组中...

"allOf": [
        { "contains": { "const": "A" } },
        { "contains": { "const": "B" } },
        { "contains": { "const": "C" } }
      ],

这是您唯一遗漏的部分。 contains 关键字确保数组包含一个根据子模式有效的项目。位置不重要。

这是完整的架构和演示:https://jsonschema.dev/s/jVSAG

{
  "$schema": "http://json-schema.org/draft-07/schema",
  "type": "object",
  "properties": {
    "sets": {
      "type": "array",
      "allOf": [
        { "contains": { "const": "A" } },
        { "contains": { "const": "B" } },
        { "contains": { "const": "C" } }
      ],
      "items": {
        "oneOf": [
          { "enum": ["A", "B", "C", "X", "Y", "Z"] },
          { "pattern": "^_" }
        ]
      },
      "uniqueItems": true
    }
  }
}