首页 文章

使用JSON模式验证嵌套的数字/布尔列表

提问于
浏览
0

我不确定这是否可以使用JSON模式,但我有类似这样的数据:

[1, 1, [0, 0, [true]], true]

如何验证[0,0,1]以使至少一个项为1 / true?

到目前为止,我已设法创建模式到这一点:

{
  "type": "array",
  "items": {
    "$ref": "#/definitions/_items"
  },
  "definitions": {
    "_items": {
      "anyOf": [
        {
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        {
          "enum": [
            false,
            true
          ],
          "type": "boolean"
        },
        {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "$ref": "#/definitions/_items"
              }
            ]
          }
        }
      ]
    }
  }
}

显然它确实验证了所有可接受的值,但是如果全部,一些,一个或没有值1 / true,则它不会考虑 . 我误解了,任何,全部和一个都为此保留......

1 回答

  • 2

    你需要的是 contains 关键字 . 计划在下一版本的JSON Schema规范中添加 . 在实现之前,您可以在没有 contains 的情况下执行此操作,但逻辑有点复杂 . 我还清理了到目前为止你所拥有的一些不必要的东西 .

    {
      "type": "array",
      "items": { "$ref": "#/definitions/_items" },
      "allOf": [{ "$ref": "#/definitions/contains-1-or-true" }],
      "definitions": {
        "_items": {
          "anyOf": [
            { "enum": [0, 1] },
            { "type": "boolean" },
            { "$ref": "#" }
          ]
        },
        "contains-1-or-true": {
          "not": {
            "type": "array",
            "items": {
              "not": { "enum": [1, true] }
            }
          }
        }
      }
    }
    

相关问题