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

时间:2019-05-24 21:09:31

标签: python python-3.x jsonschema python-jsonschema

我对jsonschema的问题是双重的:

给予

{
  "foo": {"ar": {"a": "r"}},
  "bar": ""
}
  1. 如何检查键“ ar”是否在“ foo”内部?

  2. 并且仅当“ ar”存在于“ foo”内部时,如何才能使“ bar”必须存在于给定的json中?

我曾尝试查找其他SO答案或jsonschema文档,但它们似乎仅检查密钥是否具有特定值,而不是检查密钥是否存在而不管其值如何。而且,嵌套对象的jsonschema似乎只检查嵌套的最深层,而不是中间的某个地方。

我想出了这个,但是没用。

{
  "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"
    ]
  }
}

1 个答案:

答案 0 :(得分:1)

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

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

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