在JSON Schema中使用oneOf对两个数组字段进行验证



我可以在JSON模式中检查两个字段吗?两个字段的类型都是对象数组。条件:

  1. 它们中的任何一个都可以一次包含值(即other应该为空)。
  2. 都可以为空

有线索吗?

// The schema
var schema = {
"id": "https://kitoutapi.lrsdedicated.com/v1/json_schemas/login-request#",
"$schema": "http://json-schema.org/draft-04/schema#",
"description": "Login request schema",
"type": "object",
"oneOf": [
{ "categories": {
"maxItems": 0
},
"positionedOffers": {
"minItems": 1
}},
{ "categories": {
"minItems": 1
},
"positionedOffers": {
"maxItems": 0
}}
],
"properties": {
"categories": {
"type": "array"
},
"positionedOffers": {
"type": "array"
}
},
"additionalProperties": false
};

// Test data 1
// This test should return a good result
var data1 = {
"positionedOffers":['hello'],
"categories":[],
}

对于你的要求,我想我会从另一个方向来解决这个问题。而不是说

如果其中一个包含值,则另一个必须为空,但两个都可以为空。

我想说

至少有一个必须为空。

这将导致您使用带有子模式的anyOf来检查每个属性是否为空数组。

{
"id": "https://kitoutapi.lrsdedicated.com/v1/json_schemas/login-request#",
"$schema": "http://json-schema.org/draft-04/schema#",
"description": "Login request schema",
"type": "object",
"anyOf": [
{
"properties": {
"categories": {
"maxItems": 0
}
}
},
{
"properties": {
"positionedOffers": {
"maxItems": 0
}
}
}
],
"properties": {
"categories": {
"type": "array"
},
"positionedOffers": {
"type": "array"
}
},
"additionalProperties": false
}

奖金材料在你的原帖中,你省略了oneOf下的properties关键字。这可能是模式无法验证的原因。我已经把它加在上面了。

第二,草案4在这一点上相当旧。您可能会受到正在使用的实现的限制,但如果可以,您应该考虑使用最新版本的JSON Schema。你可以在JSON Schema实现页面查看可用的实现以及它们支持的版本。

相关内容

  • 没有找到相关文章

最新更新