JSON Schema 对象类型不适用于 $ref 定义

问题描述

我正在使用 JSON Schema Draft-07我有一个像下面这样的 JSON 模式,可以按预期工作

{
"tests": {
      "type": "object","required": [
        "name","desc"
      ],"properties": {
        "name": {
          "type": "string"
        },"desc": {
          "type": "string"
        }
      }
    }
  }

但是如果我使用 refer type 相同的 deFinitionsiblings properties\rules 不会生效,例如

JSON Schema Store

{
  "my-schema.json": {
    "$id": "my-schema.json","$schema": "http://json-schema.org/draft-07/schema","deFinitions": {
      "objectParameter": {
        "type": "object"
      }
    },"properties": {
      "tests": {
        "$ref": "#/deFinitions/objectParameter","properties": {
          "desc": {
            "type": "string"
          },"name": {
            "type": "string"
          }
        },"required": [
          "name","desc"
        ]
      }
    },"required": [
      "tests"
    ],"type": "object"
  }
}

不确定 $ref 带来什么不同。 验证数据:"tests": {"namer": "12","desc": "12"}"tests": {} 应该失败但通过。

解决方法

“不工作”不是很具体,但您是否可能正在使用遵循草案规范版本 7 或更早版本的实现,其中 $ref 关键字的存在使任何其他兄弟关键字?如果是这样,您可以通过在子模式周围包裹一个“allOf”来解决这种情况:

"allOf": [
  { "$ref": ... },{
    "required": ...,"properties": { ... }
  }
]