【问题标题】:How to specify OR condition in If else json schema如何在 If else json 模式中指定 OR 条件
【发布时间】:2023-04-08 09:06:01
【问题描述】:

有关架构和数据,请参阅此链接

How to refer child attribute in required of parent level

在上面的示例中,要求是在 JSON Schema 中插入 IF then 条件,条件如下

如果 LandMark1 = USA 且 FlatNo = Excalibur,则需要 LandMark2 但现在我正在想办法将 AND 运算符更改为 OR。

任何有关 OR 语法更改的帮助都会有所帮助

【问题讨论】:

  • 两者都可以是真的还是异或?你看过oneOfanyOf 关键字吗?
  • 是的,两者都可以是真的,或者其中任何一个都可以是真的。我确实尝试了任何一种方法,但我没有信心,因为我无法想象语法变化

标签: json jsonschema


【解决方案1】:

由于两者都可以为真,也可以只有一个,因此您需要在if 条件下使用anyOf

这个关键字的值必须是一个非空数组。的每一项 数组必须是有效的 JSON 架构。

一个实例成功验证了这个关键字,如果它
针对至少一个由此定义的架构成功验证
关键字的值。

https://datatracker.ietf.org/doc/html/draft-handrews-json-schema-02#section-9.2.1.2

我已经使用您的架构中的一个部分演示了这一点。 您需要添加第二个子模式。

anyOf 数组中的每个项目本身就是一个架构。

{
  "$schema":"https://json-schema.org/draft/2019-09/schema",
  "if": {
    "anyOf": [
      {
        "properties":{
          "LandMark1":{
            "const":"USA"
          }
        }
      },
      {Condition_two_subschema for flatNo excalibur}
    ]
  },
  "then": true,
  "else": false
}

【讨论】:

  • 在前面的示例中,我们将 if else 放在 allOf 中,我们可以以这种方式存储它,以便我们可以拥有 if then 的链。我试过了,但条件不起作用
  • 是的,你可以,但它们不是 if/then/else 的链。 allOf 中的所有子模式都是相等的。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 2019-12-28
相关资源
最近更新 更多