【发布时间】:2020-11-17 05:23:21
【问题描述】:
我正在尝试根据具有以下结构的架构验证 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“通用”的类型定义,并稍后在 $def 块之外添加限制。这样我可以将相同的 childType 用于不同的场景,其中name 可能不是“aaa”或“bbb”。
谢谢!
【问题讨论】:
-
这不是不可能做到的,但我不知道它是否会以对你有用的方式完成。你能解释一下你为什么要这样做吗?这有什么用例/要求?实际值是多少?为什么它们仅限于两个字符串?
-
感谢您的回复。所以我要做的是将
$defs 放在一个单独的 JSON 文件(所有“通用”类型)中,并为我要验证的每个场景都有一个单独的 JSON 文件。该场景可能需要“aaa”或“bbb”,并且 childType 的其他“属性”是可选的,而另一个场景需要我验证不同的属性(对于第一种情况是可选的)。这样我可以重用场景特定模式中的类型,而不是到处复制粘贴它们。我希望它澄清。
标签: json schema jsonschema