问题描述
我正在使用 JSON Schema Draft-07
。我有一个像下面这样的 JSON 模式,可以按预期工作
{
"tests": {
"type": "object","required": [
"name","desc"
],"properties": {
"name": {
"type": "string"
},"desc": {
"type": "string"
}
}
}
}
但是如果我使用 refer
type
相同的 deFinition
,siblings
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": { ... }
}
]