JSON 架构:使用在另一个对象中定义的 属性 值

JSON Schema: using property value defined in another object

我在 JSON 架构中有两个属性:
"A": {"type": "object", "properties":{ "X":{"type":"boolean"}}}
"B": {"type": "object", "properties":{...}}

B 的逻辑中,我需要使用 X 的值来设置 B 属性 值和 "required":[...].
如何在 B 中使用 X 的值?

您需要在架构级别声明一个规则,以定义包含这两个属性的对象。然后,您可以使用 dependentSchemasdependentRequiredif/then/else 关键字来定义规则,例如“if in 属性 A,然后是 属性 B 中的

https://json-schema.org/understanding-json-schema/reference/conditionals.html

例如:

{
  "type": "object",
  "properties": {
    "A": {
      "type": "object",
      "properties":{ "X":{"type":"boolean"}}
    },
    "B": {
      "type": "object",
      "properties":{...}
    }
  },
  "if": {
    "required": ["A"],
    "properties": {
      "A": {
        "required": ["X"],
        "properties": { "X": { "const": true } }
      }
    }
  },
  "then": {
    "required": ["B"],
    "properties": {
      "B": {
        "required": ["Y"],
        "properties": { "Y": { "const": "/A/X is true" } }
      }
    }
  }
}

这是说“如果 属性 A 存在,并且有一个 sub属性 X 为真,那么在 B 下必须有一个 属性 Y 是字符串” /A/X 为真"".

一般来说,关于 JSON 架构的标准规范,您不能在其他地方“使用”来自 JSON 实例的值进行验证,例如,您取一个值并用它填充 required 关键字。

但是,您可以使用 if-then-else 定义条件,这些条件使用值来决定在验证流程的此时应随后应用哪些其他模式。

dependentSchemasdependentRequired 关键字关注属性的存在。

有更多详细信息here