JSON 当且仅当嵌套对象中存在特定键时才需要模式条件

JSON Schema conditional required if and only if a specific key exists in nested object

我对 jsonschema 的问题是双重的:

给出

{
  "foo": {"ar": {"a": "r"}},
  "bar": ""
}
  1. 如何检查 "ar" 是否存在于 "foo" 中?

  2. 并且仅当 "ar" 存在于 "foo" 内时,我该如何做到 "bar" 必须存在于给定的 json 内?

我试过查看其他 SO 答案或 jsonschema 文档,但它们似乎只检查键是否具有特定值,而不是键是否存在而不考虑其值。 json嵌套对象的模式似乎只检查嵌套的最深层次,而不是中间的某个地方。

我想到了这个,但是没有用。

{
  "definitions": {},
  "$schema": "https://json-schema.org/draft-07/schema#",
  "$id": "https://example.com/root.json",
  "type": "object",
  "properties": {
    "foo": {
      "type": "object"
    },
    "bar": {
      "type": "string"
    }
  },
  "required": [
    "foo"
  ],
  "if": {
    "properties": {
      "foo": {
        "properties": {
          "ar": {
            "type": "object"
          }
        }
      }
    }
  },
  "then": {
    "required": [
      "bar"
    ]
  }
}

要测试 属性 是否存在,请使用 required 关键字。

{
  "properties": {
    "foo": {
      "required": ["ar"]
    }
  },
  "required": ["foo"]
}

如果 /foo/ar 存在,此架构验证为真,否则验证为假。使用它代替您的 if 架构,您的条件应该按预期工作。