我如何根据 JSON 模式中另一个 属性 值的存在来验证一个 属性 值的存在依赖性
How can I validate the dependency of existance of value for one property value based on the existance of another property value in JSON schema
我有一个 JSON 模式:
{
"type": "object",
"properties": {
"name": { "type": ["string", "null"] },
"credit_card": {
"type": ["string", "null"]
},
"billing_address": {
"type": ["string", "null"]
}
},
"dependencies": [{
"credit_card": ["billing_address"]
}]
}
如果提供 credit_card 值,我希望存在 billing_address 值。但是,由于我已将 billing_address 的类型指定为 null,因此即使存在 credit_card 值,它也接受 null 值,因此不进行验证。有人可以建议这样做的正确方法。
提前致谢。
您的 dependencies
应该定义为对象 {}
而不是数组 []
。您只需要删除外部方括号:
"dependencies": {
"credit_card": ["billing_address"]
}
总的来说,这给出了以下架构:
{
"type": "object",
"properties": {
"name": {
"type": ["string", "null"]
},
"credit_card": {
"type": ["string", "null"]
},
"billing_address": {
"type": ["string", "null"]
}
},
"dependencies": {
"credit_card": ["billing_address"]
}
}
使用上面的架构,下面的JSON是有效的:
{
"name": "Abel",
"credit_card": "1234...",
"billing_address": "some address here..."
}
但是下面的JSON是无效的:
{
"name": "Abel",
"credit_card": "1234"
}
您可以使用 this one.
等在线验证器来测试这些
您可能还需要考虑删除架构中使用的 null
值。例如,通过使用此:
{
"type": "object",
"properties": {
"name": {
"type": "string",
},
"credit_card": {
"type": "string",
},
"billing_address": {
"type": "string",
}
},
"dependencies": {
"credit_card": ["billing_address"]
}
}
使用这个修改后的架构,您现在还会收到 JSON 的验证错误,例如:
{
"name": "Abel",
"credit_card": null,
"billing_address": "some address here..."
}
Update - 两个字段都存在但为空:
如果 credit_card
和 billing_address
都为空,则可以使用条件验证来处理这种情况(添加到下面模式的末尾):
{
"type": "object",
"properties": {
"name": {
"type": ["string", "null"]
},
"credit_card": {
"type": ["string", "null"]
},
"billing_address": {
"type": ["string", "null"]
}
},
"dependencies": {
"credit_card": ["billing_address"]
},
"if": {
"properties": { "credit_card": { "const": null } }
},
"then": {
"properties": { "billing_address": { "const": null } }
}
}
现在,以下内容也将有效:
{
"name": "Abel",
"credit_card": null,
"billing_address": null
}
一个警告说明:这使用了 JSON 架构规范的一个相对较新的功能。我在上面提到的在线验证器支持它 - 但我不知道它是否被您可能使用的任何验证器支持。
我有一个 JSON 模式:
{
"type": "object",
"properties": {
"name": { "type": ["string", "null"] },
"credit_card": {
"type": ["string", "null"]
},
"billing_address": {
"type": ["string", "null"]
}
},
"dependencies": [{
"credit_card": ["billing_address"]
}]
}
如果提供 credit_card 值,我希望存在 billing_address 值。但是,由于我已将 billing_address 的类型指定为 null,因此即使存在 credit_card 值,它也接受 null 值,因此不进行验证。有人可以建议这样做的正确方法。 提前致谢。
您的 dependencies
应该定义为对象 {}
而不是数组 []
。您只需要删除外部方括号:
"dependencies": {
"credit_card": ["billing_address"]
}
总的来说,这给出了以下架构:
{
"type": "object",
"properties": {
"name": {
"type": ["string", "null"]
},
"credit_card": {
"type": ["string", "null"]
},
"billing_address": {
"type": ["string", "null"]
}
},
"dependencies": {
"credit_card": ["billing_address"]
}
}
使用上面的架构,下面的JSON是有效的:
{
"name": "Abel",
"credit_card": "1234...",
"billing_address": "some address here..."
}
但是下面的JSON是无效的:
{
"name": "Abel",
"credit_card": "1234"
}
您可以使用 this one.
等在线验证器来测试这些您可能还需要考虑删除架构中使用的 null
值。例如,通过使用此:
{
"type": "object",
"properties": {
"name": {
"type": "string",
},
"credit_card": {
"type": "string",
},
"billing_address": {
"type": "string",
}
},
"dependencies": {
"credit_card": ["billing_address"]
}
}
使用这个修改后的架构,您现在还会收到 JSON 的验证错误,例如:
{
"name": "Abel",
"credit_card": null,
"billing_address": "some address here..."
}
Update - 两个字段都存在但为空:
如果 credit_card
和 billing_address
都为空,则可以使用条件验证来处理这种情况(添加到下面模式的末尾):
{
"type": "object",
"properties": {
"name": {
"type": ["string", "null"]
},
"credit_card": {
"type": ["string", "null"]
},
"billing_address": {
"type": ["string", "null"]
}
},
"dependencies": {
"credit_card": ["billing_address"]
},
"if": {
"properties": { "credit_card": { "const": null } }
},
"then": {
"properties": { "billing_address": { "const": null } }
}
}
现在,以下内容也将有效:
{
"name": "Abel",
"credit_card": null,
"billing_address": null
}
一个警告说明:这使用了 JSON 架构规范的一个相对较新的功能。我在上面提到的在线验证器支持它 - 但我不知道它是否被您可能使用的任何验证器支持。