[英]validation of json schema having oneOf keyword
我的Web应用程序具有以下json模式。
{
"type":"object",
"properties": {
"person_identifier":{
"type":"object",
"oneOf":[
{"$ref":"#/person_identifier/rememberme_id"},
{"$ref":"#/person_identifier/email"},
{"$ref":"#/person_identifier/account_number"}
],
"email":{
"type":"string"
},
"rememberme_id":{
"type":"string"
},
"account_number":{
"type":"string"
}
}
}
}
我的目标是仅接受对我的应用程序的api请求中的三个“ person_identifier”电子邮件,rememberme_id或account_number之一。 我无法验证上述架构将强制执行所需的约束。 我尝试在jsfiddle.com上进行验证,但它表明我的架构未正确验证输入。 这是我在jsfiddle.com上进行验证的代码:
var data, schema;
schema = {
person_identifier:{
type:'object',
'oneOf':[
{$ref:'#/person_identifier/rememberme_id'},
{$ref:'#/person_identifier/email'},
{$ref:'#/person_identifier/buyer_account_number'}
],
'email':{
type:'string'
},
'rememberme_id':{
type:'string'
},
'account_number':{
type:'string'
}
}
};
data = {
person_identifier: {
email: 'abc@abc.com',
rememberme_id: '1345'
}
};
alert('Validation: ' + tv4.validate(data, schema, true));
例如,jsfiddle验证数据是否正确满足了模式(如果不正确)。 仅应允许一个输入标识符。 我已经介绍了有关使用oneOf的几乎所有可用问题和文档。 关于我做错了什么的任何指示? 谢谢。
使用http://geraintluff.github.io/tv4/try/我可以为我的问题提出两个答案。 这里是链接: 正确答案为和ANSWER2
我的问题中的模式不正确。 该模式意味着匹配oneOf(所有三个引用),电子邮件,rememberme_id,buyer_account_number。 数据(电子邮件和Rememberme_id)与person_identifier的电子邮件和Rememberme_id子资源(分别)匹配。 它们与oneOf关键字分开出现,因此oneOf从未奏效。
使用来自http://www.asbjornenge.com/wwc/json_schema.html的简单解释,我理解了我的错误。 对于复杂的oneOf示例,与上一个链接中提到的示例不同,我们可以在所有打算由oneOf关键字限制的子方案中使用通用的“属性”(我上面发布的答案链接中的“ identifierType”)。 拥有使oneOf发挥作用的共同但有区别的因素至关重要。 另外,我们所引用的oneOf中的子模式应该完全存在于oneOf数组(Answer2)内部,或者作为引用传递(Answer1)。 它们不能与oneOf逗号分隔,因为它破坏了目的(我犯的错误)。 我将@cloudfeet的答案提到了这个问题。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.