在 IF 条件中引用内部属性 - JSON 模式

Referring inner properties in the IF condition - JSON Schema

以下是描述问题的示例架构

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "definitions": {
        "person": {
            "type": "object",
            "properties": {
                "age": {
                    "type": "string"
                }
            }
        }
    },
    "properties": {
        "child": {
            "$ref": "#/definitions/person"
        }
    },
    "required": [
        "child"
    ],
    "if": {
        "properties": {
            "person/age": {
                "const": "3"
            }
        }
    },
    "then": {
        "properties": {
            "guardian": {
                "$ref": "#/definitions/person"
            }
        },
        "required": [
            "guardian"
        ]
    }
}

有没有办法在 person 对象中引用年龄?

{"child":{"age":"3"}}。应该失败,因为缺少监护人标签

由于缺少监护对象,上述数据应该会失败。

请记住,if 只是针对实例验证的常规模式。就像使用任何嵌套对象结构一样嵌套 properties

{
  "type": "object",
  "properties": {
    "child": {
      "type": "object",
      "properties": {
        "age": { "const": "3" }
      },
      "required": ["age"]
    }
  },
  "required": ["child"]
}

请注意,typerequired 关键字是必要的,以免无意中触发 then 架构。例如,如果没有它们,这些会导致 then 在您可能不希望它触发时触发。

{}
{ "child": null }
{ "child": {} }