Json Schema对外部字段的依赖关系



给定一个类似的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" ]
}
}

最新更新