我可以在 JSON 模式中使用 $ref 来引用另一个对象中的对象吗?

Can I use $ref in JSON Schema to refer to object from another object?

在下面的示例架构中,我基本上希望 incident 对象中的 reporting_personpeople 数组中引用的 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 旁边有一个 $reftype 将被忽略。如果该对象中有 $ref,则该对象将被视为引用,而不是模式。因此,“type”不被评估为 type 关键字。这只是参考文献中的噪音。