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