【发布时间】:2022-11-18 05:01:33
【问题描述】:
我正在尝试为一些用作脚本的 json 文件创建 2 个单独的模式。 一个模式应该包含所有可能的命令,而另一个模式应该只包含命令的一个子集。
我的想法是我首先创建最小模式:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"$schema": {},
"commands": {
"type": "array",
"items":
{
"title": "One step of the migration",
"type": "object",
"minProperties": 1,
"maxProperties": 1,
"properties": {
"simple_command_1": {"type": "object"},
"simple_command_2": {"type": "object"},
}
}
}
}
}
这将像这样验证 json 文件:
{
"$schema": "../../migration_schema_v1.json",
"commands": [
{"simple_command_1": {}},
{"simple_command_1": {}},
{"simple_command_2": {}},
{"simple_command_2": {}},
]
我试图避免使用extend这个词,但是...我希望能够创建第二个模式,其中包含第一个模式具有的每个命令和一个额外的advanced_command_3。所以我创建了这个:
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$ref": "/migration_schema_v1.json#/",
"type": "object",
"properties": {
"foo": {
"type": "object",
"title": "this does work"
},
"commands": {
"items":
{
"properties": {
"advanced_command_3": {"type": "object"}
}
}
}
}
}
我可以引用第二个模式,它确实继承了第一个模式的所有内容,但我真的无法添加任何属性(命令)
但是,我能够在根目录中的“命令”旁边添加其他属性。请参见“foo”属性。
在子属性中使用 allOf[] 或 $ref 似乎没有什么区别。
我弄错了吗? 谢谢!
【问题讨论】:
标签: jsonschema