JSON 架构:使用在另一个对象中定义的 属性 值
JSON Schema: using property value defined in another object
我在 JSON 架构中有两个属性:
"A": {"type": "object", "properties":{ "X":{"type":"boolean"}}}
"B": {"type": "object", "properties":{...}}
在 B
的逻辑中,我需要使用 X
的值来设置 B
属性 值和 "required":[...]
.
如何在 B
中使用 X
的值?
您需要在架构级别声明一个规则,以定义包含这两个属性的对象。然后,您可以使用 dependentSchemas
、dependentRequired
或 if
/then
/else
关键字来定义规则,例如“if in 属性 A,然后是 属性 B 中的 。
https://json-schema.org/understanding-json-schema/reference/conditionals.html
例如:
{
"type": "object",
"properties": {
"A": {
"type": "object",
"properties":{ "X":{"type":"boolean"}}
},
"B": {
"type": "object",
"properties":{...}
}
},
"if": {
"required": ["A"],
"properties": {
"A": {
"required": ["X"],
"properties": { "X": { "const": true } }
}
}
},
"then": {
"required": ["B"],
"properties": {
"B": {
"required": ["Y"],
"properties": { "Y": { "const": "/A/X is true" } }
}
}
}
}
这是说“如果 属性 A 存在,并且有一个 sub属性 X 为真,那么在 B 下必须有一个 属性 Y 是字符串” /A/X 为真"".
一般来说,关于 JSON 架构的标准规范,您不能在其他地方“使用”来自 JSON 实例的值进行验证,例如,您取一个值并用它填充 required
关键字。
但是,您可以使用 if-then-else
定义条件,这些条件使用值来决定在验证流程的此时应随后应用哪些其他模式。
dependentSchemas
和 dependentRequired
关键字关注属性的存在。
有更多详细信息here。
我在 JSON 架构中有两个属性:
"A": {"type": "object", "properties":{ "X":{"type":"boolean"}}}
"B": {"type": "object", "properties":{...}}
在 B
的逻辑中,我需要使用 X
的值来设置 B
属性 值和 "required":[...]
.
如何在 B
中使用 X
的值?
您需要在架构级别声明一个规则,以定义包含这两个属性的对象。然后,您可以使用 dependentSchemas
、dependentRequired
或 if
/then
/else
关键字来定义规则,例如“if
https://json-schema.org/understanding-json-schema/reference/conditionals.html
例如:
{
"type": "object",
"properties": {
"A": {
"type": "object",
"properties":{ "X":{"type":"boolean"}}
},
"B": {
"type": "object",
"properties":{...}
}
},
"if": {
"required": ["A"],
"properties": {
"A": {
"required": ["X"],
"properties": { "X": { "const": true } }
}
}
},
"then": {
"required": ["B"],
"properties": {
"B": {
"required": ["Y"],
"properties": { "Y": { "const": "/A/X is true" } }
}
}
}
}
这是说“如果 属性 A 存在,并且有一个 sub属性 X 为真,那么在 B 下必须有一个 属性 Y 是字符串” /A/X 为真"".
一般来说,关于 JSON 架构的标准规范,您不能在其他地方“使用”来自 JSON 实例的值进行验证,例如,您取一个值并用它填充 required
关键字。
但是,您可以使用 if-then-else
定义条件,这些条件使用值来决定在验证流程的此时应随后应用哪些其他模式。
dependentSchemas
和 dependentRequired
关键字关注属性的存在。
有更多详细信息here。