Java 如何基于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"

我有一个JSON模式:

{
  "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的替代方案解决了这个问题。它成功地工作了。:)很高兴你有一个适合你的解决方案。欢迎您访问,这样其他人就可以确切地看到您是如何使用您的方法解决问题的。