JSON 嵌套对象中的模式 v4 "required"
JSON Schema v4 "required" in nested object
我试过搜索,但我不太确定如何用文字表达!混淆点是 "required" 如何在 JSON 模式 v4 中工作时 嵌套键值具有 相同的名称 .
例如,这个架构:
{
"Root": {
"type": ["array", "null"],
"items": {
"type": "object",
"properties": {
"LevelOne": {
"required": ["id", "name", "LevelOneRepeat"],
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"LevelOneRepeat": {
"type": ["array", "null"],
"items": {
"type": "object",
"properties": {
"required": ["id", "name"],
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
}
}
}
}
}
}
在 LevelOne 内部,我需要 "id"、"name" 和 "LevelOneRepeat"。但是,在 LevelOneRepeat 中,我还需要 "id" 和 "name"。
required 是只检查同一级别的元素,还是检查所有子元素?如果所需的键值(同名)已在上面的级别中列出,我是否需要在 LevelOneRepeat 中包含所需的内容?
我用我的架构测试了我的 JSON,但我可能在某处搞砸了我的代码,因为不再需要工作了。
LevelOne
和LevelOneRepeat
中的id
只是巧合。它们必须单独指定为 required
.
您的架构存在一些问题,这可能导致您对 required
的工作方式感到困惑。
这是更正后的架构。
{
"type": ["array", "null"],
"items": {
"type": "object",
"properties": {
"LevelOne": {
"type": "object",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" },
"LevelOneRepeat": {
"type": ["array", "null"],
"items": {
"type": "object",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" }
},
"required": ["id", "name"]
}
}
},
"required": ["id", "name", "LevelOneRepeat"],
}
}
}
}
第一个问题是您定义嵌套对象的方式。每个 属性 的值必须是一个架构。查看我如何更改 LevelOne
定义以查看如何正确定义嵌套对象。
第二个问题是 required
关键字在错误的位置。它应该与 properties
关键字处于同一级别,而不是嵌套在 properties
对象中。这就是您的 required
约束不起作用的原因。看看我是如何更改 LevelOne
和 LevelOneRepeat
定义的。
一旦你解决了这些问题,希望它应该更清楚 required
关键字只适用于定义它的模式。它不适用于任何父模式或子模式。
我试过搜索,但我不太确定如何用文字表达!混淆点是 "required" 如何在 JSON 模式 v4 中工作时 嵌套键值具有 相同的名称 .
例如,这个架构:
{
"Root": {
"type": ["array", "null"],
"items": {
"type": "object",
"properties": {
"LevelOne": {
"required": ["id", "name", "LevelOneRepeat"],
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"LevelOneRepeat": {
"type": ["array", "null"],
"items": {
"type": "object",
"properties": {
"required": ["id", "name"],
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
}
}
}
}
}
}
在 LevelOne 内部,我需要 "id"、"name" 和 "LevelOneRepeat"。但是,在 LevelOneRepeat 中,我还需要 "id" 和 "name"。
required 是只检查同一级别的元素,还是检查所有子元素?如果所需的键值(同名)已在上面的级别中列出,我是否需要在 LevelOneRepeat 中包含所需的内容?
我用我的架构测试了我的 JSON,但我可能在某处搞砸了我的代码,因为不再需要工作了。
LevelOne
和LevelOneRepeat
中的id
只是巧合。它们必须单独指定为 required
.
您的架构存在一些问题,这可能导致您对 required
的工作方式感到困惑。
这是更正后的架构。
{
"type": ["array", "null"],
"items": {
"type": "object",
"properties": {
"LevelOne": {
"type": "object",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" },
"LevelOneRepeat": {
"type": ["array", "null"],
"items": {
"type": "object",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" }
},
"required": ["id", "name"]
}
}
},
"required": ["id", "name", "LevelOneRepeat"],
}
}
}
}
第一个问题是您定义嵌套对象的方式。每个 属性 的值必须是一个架构。查看我如何更改 LevelOne
定义以查看如何正确定义嵌套对象。
第二个问题是 required
关键字在错误的位置。它应该与 properties
关键字处于同一级别,而不是嵌套在 properties
对象中。这就是您的 required
约束不起作用的原因。看看我是如何更改 LevelOne
和 LevelOneRepeat
定义的。
一旦你解决了这些问题,希望它应该更清楚 required
关键字只适用于定义它的模式。它不适用于任何父模式或子模式。