在Json模式中按名称封装根对象以供重用?

在Json模式中按名称封装根对象以供重用?,json,jsonschema,Json,Jsonschema,我正在尝试为一个对象创建一个Json模式。在定义嵌入对象时,是否可以引用顶级根对象 我已经看到我可以通过$ref重用定义:“#/definitions/…”,但我正在尝试重用整个顶级对象。不仅仅是其中的属性 如果我的json如下所示: { "name": "brodie", "age": 2, "bestFriend": { "name": "clara", "age": 4, "bestFriend": {

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

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

如果我的json如下所示:

{
    "name": "brodie",
    "age": 2,
    "bestFriend": {
        "name": "clara",
        "age": 4,
                "bestFriend": {
                       "name": "stella",
                       "age" : 5
                }
    }
}
{
"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"}

            ]
        }
    }
}
我可以创建一个json模式,如下所示:

{
    "name": "brodie",
    "age": 2,
    "bestFriend": {
        "name": "clara",
        "age": 4,
                "bestFriend": {
                       "name": "stella",
                       "age" : 5
                }
    }
}
{
"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"}

            ]
        }
    }
}
我对brodie、clara和stella的所有3个实例使用相同的json对象。我想将顶层对象封装为一个定义,以便以后可以更清晰地引用它。如果顶部没有$refs列表,而底部只有“definitions”对象,那就太好了。这可能吗?或者是我上面推荐的模式


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

允许递归json模式的可能重复。看看这个答案: