Json 外部字段的模式依赖
Json Schema dependency on outer field
给定一个 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"]
}
}
}
但是,要求该字段比依赖字段高一级的语法是什么?
这对于 'dependencies' 来说太复杂了,所以我们回到 if/then/else 子句。我们将这些关键字放在顶层,也就是必填字段所在的位置。在伪代码中:“如果存在 payment_details 属性,并且它有 credit_card 属性,则需要 billing_address。”
{
...,
"if": {
"type": "object",
"required": [ "payment_details" ],
"properties": {
"payment_details": {
"type": "object",
"required": [ "credit_card" ]
}
},
"then": {
"type": "object",
"required": [ "billing_address" ]
}
}
请注意,此处需要“type”和“required”关键字——因为不同类型的数据(例如数组)会导致特定于对象的关键字(如“properties”和“required”)的计算结果始终为是的。
感谢 Ether!这有效,但仅在 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" ]
}
}
给定一个 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"]
}
}
}
但是,要求该字段比依赖字段高一级的语法是什么?
这对于 'dependencies' 来说太复杂了,所以我们回到 if/then/else 子句。我们将这些关键字放在顶层,也就是必填字段所在的位置。在伪代码中:“如果存在 payment_details 属性,并且它有 credit_card 属性,则需要 billing_address。”
{
...,
"if": {
"type": "object",
"required": [ "payment_details" ],
"properties": {
"payment_details": {
"type": "object",
"required": [ "credit_card" ]
}
},
"then": {
"type": "object",
"required": [ "billing_address" ]
}
}
请注意,此处需要“type”和“required”关键字——因为不同类型的数据(例如数组)会导致特定于对象的关键字(如“properties”和“required”)的计算结果始终为是的。
感谢 Ether!这有效,但仅在 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" ]
}
}