JSON Schema:非空元素唯一的数组

我正在尝试构建满足以下条件的 JSON 模式:

  1. 声明具有至少一个属性的顶级对象

  2. 每个属性的值将是一个数组,每个数组必须包含确切的N项目

  3. 数组项必须是取自闭区间的整数[J, K],或者null

  4. 每个数组中的整数项在该数组中必须是唯一的

  5. 没有应用唯一性约束null(因此N和区间大小之间没有隐含关系K-J

我遇到的问题是#4 和#5。使用此模式很容易满足前 3 个要求以及第 4 个要求的一部分:

{

  "$schema": "http://json-schema.org/draft/2019-09/schema#",

  "type": "object",

  "minProperties": 1,

  "additionalProperties": {

    "type": "array",

    "minItems": N,

    "maxItems": N,

    "items": {

      "anyOf": [

        {

          "type": "integer",

          "minimum": J,

          "maximum": K

        },

        {

          "type": "null"

        }

      ]

    },

    "uniqueItems": true

  }

}

我不确定如何(或者是否有可能)指定一个uniqueItems仅将约束应用于允许项的子集的数组。我尝试移动uniqueItems到架构的较低级别,希望它可以在受限范围内运行,但这不起作用。


这也许可以使用条件语句,但我还没有走那条路,因为我不确定它是否真的有效,我希望有一种我忽略的更简单的方法。


所以,我的问题是:有没有一种方法可以指定一个 JSON 模式数组,该数组有选择地仅对不是的项目强制执行唯一性约束null?


慕标琳琳
浏览 110回答 1
1回答

神不在的星期二

uniqueItems这超出了JSON Schema 能够表达的能力,也不是约束。您将需要在应用程序业务逻辑的其他地方检查此要求。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript