Java 如何基于JSON模式中另一个属性值的存在性验证一个属性值的存在性的依赖关系
我有一个JSON模式:Java 如何基于JSON模式中另一个属性值的存在性验证一个属性值的存在性的依赖关系,java,json,schema,json-schema-validator,Java,Json,Schema,Json Schema Validator,我有一个JSON模式: { "type": "object", "properties": { "name": { "type": ["string", "null"] }, "credit_card": { "type": ["string", "null"
{
"type": "object",
"properties": {
"name": { "type": ["string", "null"] },
"credit_card": {
"type": ["string", "null"]
},
"billing_address": {
"type": ["string", "null"]
}
},
"dependencies": [{
"credit_card": ["billing_address"]
}]
}
如果提供了信用卡值,我希望账单地址值存在。但由于我已将账单地址的类型指定为null,因此即使信用卡值存在,它也会接受null值,因此不会验证。有没有人能提出这样做的正确方法。
提前感谢。您的
依赖项应定义为对象{}
而不是数组[]
。您只需移除外部方括号:
“依赖项”:{
“信用卡”:[“账单地址”]
}
总的来说,这给出了以下模式:
{
“类型”:“对象”,
“财产”:{
“姓名”:{
“类型”:[“字符串”,“空”]
},
“信用卡”:{
“类型”:[“字符串”,“空”]
},
“账单地址”:{
“类型”:[“字符串”,“空”]
}
},
“依赖项”:{
“信用卡”:[“账单地址”]
}
}
使用上述模式,以下JSON是有效的:
{
“姓名”:“亚伯”,
“信用卡”:“1234…”,
“账单地址”:“此处的某些地址…”
}
但以下JSON无效:
{
“姓名”:“亚伯”,
“信用卡”:“1234”
}
您可以使用在线验证器(如)测试这些
您可能还想考虑删除在架构中使用的 null >代码>值。例如,通过使用:
{
“类型”:“对象”,
“财产”:{
“姓名”:{
“类型”:“字符串”,
},
“信用卡”:{
“类型”:“字符串”,
},
“账单地址”:{
“类型”:“字符串”,
}
},
“依赖项”:{
“信用卡”:[“账单地址”]
}
}
使用此修订的模式,您现在还将获得JSON的验证错误,如下所示:
{
“姓名”:“亚伯”,
“信用卡”:空,
“账单地址”:“此处的某些地址…”
}
更新-两个字段都存在,但为空:
如果信用卡
和账单地址
都为空,则可以使用条件验证(添加到下面的架构末尾)来处理此情况:
{
“类型”:“对象”,
“财产”:{
“姓名”:{
“类型”:[“字符串”,“空”]
},
“信用卡”:{
“类型”:[“字符串”,“空”]
},
“账单地址”:{
“类型”:[“字符串”,“空”]
}
},
“依赖项”:{
“信用卡”:[“账单地址”]
},
“如果”:{
“属性”:{“信用卡”:{“const”:null}
},
“然后”:{
“属性”:{“账单地址”:{“const”:null}
}
}
现在,以下内容也将有效:
{
“姓名”:“亚伯”,
“信用卡”:空,
“账单地址”:空
}
需要注意的是:这使用了JSON模式规范的一个相对较新的功能。我上面提到的在线验证器支持此功能,但我不知道您使用的任何验证器是否支持此功能。感谢您的回复。但是当两个字段都为空时,这样做对我没有帮助。当两个字段都为空时,我希望我的模式被认为是有效的@andrewjamesUpdated处理两个字段都存在但为空的情况。我认为问题在于对JSON版本的支持。我正在使用mule 4,并在if-then-else中添加依赖项。我认为if then else是JSON 7特性,mule不支持它@andrewjames您知道JSON 04中有什么可以作为if-then-else的替代方案吗?我已经用JSON草稿04中的支持作为if-else-then的替代方案解决了这个问题。它成功地工作了。:)很高兴你有一个适合你的解决方案。欢迎您访问,这样其他人就可以确切地看到您是如何使用您的方法解决问题的。