我有这样的模式:
{
"$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" }
}
}
},
...