【问题标题】:Deriving property names from values of another enum valued key in jsonschema从 jsonschema 中另一个枚举值键的值派生属性名称
【发布时间】:2020-06-25 06:34:12
【问题描述】:

问题:

要求仅允许对象中的那些属性名称是架构中另一个属性的数组值的一部分(另一个属性的值依赖的属性名称)。

详细说明:

我有以下 JSON:

{
  "validResources":["ip","domain","url"],
   "resources":
   {
      "ip" : "192.168.1.1",
      "domain" : "www.example.com",
   }
    
}

我想编写一个 JSON 模式,它只允许 "resources" 中属于 "validResources" 的数组列表值的那些键。

上面的 JSON 是一个有效的 JSON,因为 "ip""domain" 键实际上是数组项的一部分,它是属性 "validResources" 的值。 但是,下面的 JSON 应该返回错误,因为“文件”不是有效资源,因为它不是 "validResorces" 数组的一部分。

{
  "validResources":["ip","domain","url"],
   "resources":
   {
      "ip" : "192.168.1.1",
      "file" : "file://etc/passwd" <= No such resource in "validResources"
   }

}

我尝试了什么?

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type" : "object",
    "properties" : {
              "validResources" : { "type" : "array",
                         "minItems" : 1,
                         "uniqueItems" : true
                       },
              "resources":{
                "type":"object",
              ===Unable to proceed beyond this ===
              }
               
       
    },
}

其他搜索:

我检查了propertyNames,但是,它只能从另一个模式派生,或者将正则表达式模式定义为其模式的一部分。但在这种情况下,“资源”中的 propertyNames / 键取决于事先未知的 "validResources" 属性的值,并且“资源”应该只允许那些字符串/名称作为其属性,这些属性是值的一部分在"validResources"的数组列表中。

有一个悬而未决的问题有点类似于这个问题here

【问题讨论】:

  • 如果您需要的值是事先知道的,那么可以。如果您希望它基于数据是动态的(可以是任何值),那么不。看起来你事先知道所有的价值观?
  • @Relequestual 这些值是未知的。因此提出了这个问题。
  • 在这种情况下,对不起,不,你不能这样做。
  • @Relequestual 好像我不能按日期执行此操作。我发布解释并将其标记为答案,只是为了他人的利益。感谢您的回答。

标签: json schema jsonschema


【解决方案1】:

使用 json 模式无法解决此类问题,其中草稿 7 是撰写本文时的最新草稿。

这个问题还与 json-schema 规范的 github 问题中已经提到的多个问题有关。显然,正在积极跟踪与解决此类问题相关的提案here

由于这涉及从 json 模式实例的值进行查找,而不是单独的结构验证(这是迄今为止 json 模式标准存在的主要动机),因此现在可能必须以不同的方式处理直到下一个草稿到来或提到的问题被处理。

【讨论】:

  • JSON Schema Github 上的链接问题...我们希望其他词汇表能够做到这一点,因此必须提供一定程度的指导。 HyperSchema 词汇表在某些方面确实做到了这一点,但不是以对您的情况有用的方式。
猜你喜欢
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
相关资源
最近更新 更多