首页 > 解决方案 > 在 Json 模式中按名称封装 Root 对象以供重用?

问题描述

我正在尝试为一个对象创建一个 Json 模式。在其中定义嵌入对象时,是否可以引用顶级根对象?

我已经看到我可以通过 $ref:"#/definitions/..." 重用定义,但我正在尝试重用整个顶级对象。不仅仅是里面的属性。

如果我的 json 看起来像这样:

{
    "name": "brodie",
    "age": 2,
    "bestFriend": {
        "name": "clara",
        "age": 4,
                "bestFriend": {
                       "name": "stella",
                       "age" : 5
                }
    }
}

我可以创建一个如下所示的 json 模式:

{
"type": "object",
"properties": {
    "name": {
            "$ref": "#/definitions/name"
        },
        "age": {
            "$ref": "#/definitions/age"
        },
        "bestFriend": {
            "$ref": "#/definitions/bestFriend"


    },
},
    "definitions": {
        "name": {
            "type": "string"
        },
        "age": { 
            "type": "integer"
        },
        "bestFriend": {
            "type": "object",
            "allOf": [
                {"$ref": "#/defintions/name"},
                {"$ref": "#/definitions/age"},
                {"$ref": "#/definitions/bestFriend"}

            ]
        }
    }
}

但我想做类似的事情

{
    "type": "object",
    "title": "bestFriend",
    "properties": {
        "$ref": "#/definitions/bestFriend"
    },
    "definitions": {
        "name": {
            "type": "string"
        },
        "age": { 
            "type": "integer"
        },
        "bestFriend": {
            "type": "object",
            "allOf": [
                {"$ref": "#/defintions/name"},
                {"$ref": "#/definitions/age"},
                {"$ref": "#/definitions/bestFriend"}

            ]
        }
    }
}

我对所有 3 个实例 brodie、clara、stella 使用相同的 json 对象。我想将顶级对象封装为一个定义,以便稍后以更简洁的方式引用它。如果我在顶部没有 $refs 列表并且只在底部的“定义”对象中包含它们,那就太好了。这甚至可能吗?或者是我上面推荐的模式。

(我知道我可以内联定义其中一些字段,但我计划大量重用一些 json 对象,并且觉得如果所有内容都在“定义”部分中定义会更清晰。)

标签: jsonjsonschema

解决方案


推荐阅读