JSON架构IF/THEN需要嵌套对象 [英] JSON Schema if/then require nested object
本文介绍了JSON架构IF/THEN需要嵌套对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个JSON:
{
"i0": {
"j0": {
"a0": true
}
},
"i1": {
"j1": {
"a1": "stuff"
}
}
}
我想要验证:
如果a0
为True,则a1
应为必填项。
我的架构当前为:
{
"$schema": "http://json-schema.org/draft-07/schema",
"id": "id",
"type": "object",
"required": [
"i0",
"i1"
],
"allOf": [
{
"if": {
"properties": {
"i0": {
"j0": {
"a0": true
}
}
}
},
"then": {
"properties": {
"i1": {
"j1": {
"required": [
"a1"
]
}
}
}
}
}
]
}
此条件似乎并未实际运行。或者,如果我尝试将required
放在与我正在检查的值相同的级别上,我会看到得到一个非常类似的条件。如:
"allOf": [
{
"if": {
"a0": true
},
"then": {
"required": [
"a1"
]
}
}
]
但这将要求a1
与a1
一起位于j0
之下。
如何根据j0
下的值要求j1
下的对象?
推荐答案
试试:
{
"if":{
"type":"object",
"properties":{
"i0":{
"type":"object",
"properties":{
"j0":{
"type":"object",
"required":["a0"]
}
},
"required":["j0"]
}
},
"required":["i0"]
},
"then":{
"type":"object",
"properties":{
"i1":{
"type":"object",
"properties":{
"j1":{
"type":"object",
"required":["a1"]
}
},
"required":["j1"]
}
},
"required":["i1"]
}
}
您必须在if
/then
关键字中使用整体结构,从它们具有的任何公共词根开始。在这种情况下,它们的路径在i0
/i1
属性处开始分叉,因此您必须从该点开始包含整个结构。
type
关键字确保您有一个对象,否则当使用其他类型(如string
或boolean
)时,架构可能会通过验证。
required
关键字确保if
/then
子架构仅与实际包含i0.j0.a0
/i1.j1.a1
属性路径的对象匹配。
此外,a0
/`a1属性的required
关键字仅指定它们存在。如果需要,可以向该子架构添加更多验证。
这篇关于JSON架构IF/THEN需要嵌套对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文