给定一个类似的json结构
{
"name": "John Doe",
"billing_address": "123 main st",
"payment_details":{"credit_card": 55555555}
}
如果payment_details.credit_card存在,我需要将"billing_address"设置为必填字段。
我从这个例子开始,如果两个字段都在嵌套的同一级别
{
"type": "object",
"properties": {
"name": { "type": "string" },
"credit_card": { "type": "number" }
},
"required": ["name"],
"dependencies": {
"credit_card": {
"properties": {
"billing_address": { "type": "string" }
},
"required": ["billing_address"]
}
}
}
但是,需要比从属字段高一级的字段的语法是什么?
这对"依赖项"来说太复杂了,所以我们回到if/then/else子句。我们将这些关键字放在需要字段的顶层;如果存在payment_details属性,并且它具有creditcard属性,则需要billing_address">
{
...,
"if": {
"type": "object",
"required": [ "payment_details" ],
"properties": {
"payment_details": {
"type": "object",
"required": [ "credit_card" ]
}
},
"then": {
"type": "object",
"required": [ "billing_address" ]
}
}
注意;类型";以及";"必需";这里需要关键字,因为不同类型的数据(例如数组(将导致特定于对象的关键字;属性";以及";"必需";总是评估为真。
感谢以太币!这是有效的,但只有在将信用卡作为属性添加到if
部分之后。完整的if语句看起来像这个
"if": {
"type": "object",
"required": ["payment_details"],
"properties": {
"payment_details": {
"type": "object",
"properties": {
"credit_card": {}
},
"required": ["credit_card"]
}}},
完整的json模式看起来像这个
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"billing_address": {
"type": "string"
},
"payment_details": {
"type": "object",
"properties": {
"credit_card": {
"type": "integer"
}
}
}
}
,
"if": {
"type": "object",
"required": ["payment_details"],
"properties": {
"payment_details": {
"type": "object",
"properties": {
"credit_card": {}
},
"required": ["credit_card"]
}}},
"then": {
"type": "object",
"required": [ "billing_address" ]
}
}