我可以在 JSON 模式中使用 $ref 来引用另一个对象中的对象吗?
Can I use $ref in JSON Schema to refer to object from another object?
在下面的示例架构中,我基本上希望 incident
对象中的 reporting_person
是 people
数组中引用的 person
对象。这可能吗?
{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"person": {
"type": "object",
"properties": {
"person_id": {
"type": "integer"
},
"first_name": {
"type": "string"
}
}
},
"incident": {
"type": "object",
"properties": {
"incident_id": {
"type": "integer"
},
"description": {
"type": "string"
},
"reporting_person": {
"type": "string",
"$ref": "#/people/person_id"
}
}}
},
"type": "object",
"properties": {
"root" :{
"type" : "object",
"properties": {
"people" : {
"type" :"array",
"items" : { "$ref": "#/definitions/person"}
},
"incidents" : {
"type" : "array",
"items": {"$ref": "#/definitions/incident"}
}
}
}
}
}
我的另一个选择是使用模式定义一个 ID 标准并将确认转移到应用程序代码,但如果不在模式中进行这种排序数据有效性确认将是一种耻辱。谢谢
您可以使用 $ref
在任何地方引用任何模式。在这种情况下,您的 $ref
应该是 "#/definitions/person/properties/person_id
。但是,为“person_id”创建一个定义并引用它通常比指向 属性.
更清晰
我还注意到 "type": "string
旁边有一个 $ref
。 type
将被忽略。如果该对象中有 $ref
,则该对象将被视为引用,而不是模式。因此,“type”不被评估为 type
关键字。这只是参考文献中的噪音。
在下面的示例架构中,我基本上希望 incident
对象中的 reporting_person
是 people
数组中引用的 person
对象。这可能吗?
{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"person": {
"type": "object",
"properties": {
"person_id": {
"type": "integer"
},
"first_name": {
"type": "string"
}
}
},
"incident": {
"type": "object",
"properties": {
"incident_id": {
"type": "integer"
},
"description": {
"type": "string"
},
"reporting_person": {
"type": "string",
"$ref": "#/people/person_id"
}
}}
},
"type": "object",
"properties": {
"root" :{
"type" : "object",
"properties": {
"people" : {
"type" :"array",
"items" : { "$ref": "#/definitions/person"}
},
"incidents" : {
"type" : "array",
"items": {"$ref": "#/definitions/incident"}
}
}
}
}
}
我的另一个选择是使用模式定义一个 ID 标准并将确认转移到应用程序代码,但如果不在模式中进行这种排序数据有效性确认将是一种耻辱。谢谢
您可以使用 $ref
在任何地方引用任何模式。在这种情况下,您的 $ref
应该是 "#/definitions/person/properties/person_id
。但是,为“person_id”创建一个定义并引用它通常比指向 属性.
我还注意到 "type": "string
旁边有一个 $ref
。 type
将被忽略。如果该对象中有 $ref
,则该对象将被视为引用,而不是模式。因此,“type”不被评估为 type
关键字。这只是参考文献中的噪音。