下面是json对象。
{
"payment": {
"account": [
{
"type": "ACCOUNT_INFORMATION",
"identification": "2451114"
},
{
"type": "XXX",
"identification": "2451114"
}
]
}
}
这是一个模式。
{
"if": {
"properties": {
"payment": {
"properties": {
"account": {
"items": {
"properties": {
"type": {
"const": "ACCOUNT_INFORMATION"
}
}
}
}
}
}
}
},
"then": {
"properties": {
"payment": {
"properties": {
"account": {
"items": {
"properties": {
"identification": {
"maxLength": 8,
"minLength": 8
}
}
}
}
}
}
}
}
}
如果如下删除第二个核算项目,则方案出错。
{
"payment": {
"account": [
{
"type": "ACCOUNT_INFORMATION",
"identification": "2451114"
}
]
}
}
这是因为条件模式不能应用于嵌入式数组吗?
确认使用https://www.jsonschemavalidator.net/
第一个json对象不返回错误,而第二个对象返回违反minLength约束的错误。
两者都应该返回错误吗?
1条答案
按热度按时间f87krz0w1#
为了了解发生了什么,让我们分解模式,重点关注
if
模式的关键部分。给定此架构,以下示例无效,因为并非所有“type”属性都具有值“ACCOUNT_INFORMATION”。
而且,下面的值是有效的,因为所有“类型”属性都具有值“ACCOUNT_INFORMATION”。
验证结果的差异就是这两个值在方案中表现不同的原因。仅当
if
方案的计算结果为true时才应用then
方案,这是第二个示例的结果,而第一个示例没有。then
方案应用于第二个示例,minLength
约束条件导致验证失败。看起来您的条件只适用于
items
模式,因此您可以通过将条件只移动到该对象中来解决这个问题。