我正在尝试针对具有以下结构的架构验证json数据:
{
"$schema": "https://json-schema.org/draft/2019-09/schema",
"$id": "https://foo.bar/my.schema.json",
"$def": {
"parentType": {
"type": "object",
"properties": {
"child": {
"$ref": "#/$def/childType"
}
},
"required": [
"child"
]
},
"childType": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
]
}
},
"type": "object",
"properties": {
"parent": {
"$ref": "#/$def/parentType"
}
},
"required": [
"parent"
]
}
以下是json数据:
{
"parent": {
"child": {
"name": "aaa",
}
}
}
如何通过json模式验证确保以下字段 / parent / child / name 的值是 aaa 或 bbb ?
我不想对childType定义添加限制,因为我想保留childType的类型定义为“ generic”,并稍后在$def
块之外添加限制。这样,我可以在不同的情况下使用相同的childType,其中name
可能不是“ aaa”或“ bbb”。
谢谢!
答案 0 :(得分:1)
在使用草稿2019-09
时,可以将$ref
与其他关键字一起使用。
像draft-07
之类的早期草稿中不允许这样做。
例如,而不是拥有...
"properties": {
"parent": {
"$ref": "#/$def/parentType"
}
},
您可以拥有...
"properties": {
"parent": {
"$ref": "#/$def/parentType",
"enum": ["aaa", "bbb"]
}
}
如果要使用多个引用,则需要将它们作为包装在allOf
中的子方案来进行。