为什么$ref在JSON模式下有效?



我有这样的模式:

{
"$schema": "http://json-schema.org/draft-07/schema",
"definitions": {
"person": {
"properties": {
"name": { "type": "string" }
}
},
"employee": {
"$ref": "#/definitions/person",
"properties": {
"salary": { "type": "number" }
}
}
},
"properties": {
"Entry": {
"$ref": "#/definitions/employee"
},
},
}
令人惊讶的是,以下JSON在模式下是有效的:
{
"Entry": {
"name": "John",
"salary": "1234"
}
}

谁能解释一下$ref在这里是如何工作的?为什么这个JSON有效?

—EDIT—

我发现如果我改变

"$schema": "http://json-schema.org/draft-07/schema"

"$schema": "http://json-schema.org/draft-05/schema"

它会像预期的那样工作,但只是"draft-05"作品;其他如"draft-04";"draft-06">

在包括草案7的JSON Schema版本中,当$ref关键字与任何其他关键字相邻时,其他关键字将被忽略。

您可以通过将$ref封装在allOf:

中来解决这个问题。
...
"employee": {
"allOf": [ { "$ref": "#/definitions/person" } ],
"properties": {
"salary": { "type": "number" }
}
}
},
...

相关内容

  • 没有找到相关文章

最新更新