验证包含一个of关键字的json模式
我的web应用程序有以下json模式验证包含一个of关键字的json模式,json,validation,jsonschema,Json,Validation,Jsonschema,我的web应用程序有以下json模式 { "type":"object", "properties": { "person_identifier":{ "type":"object", "oneOf":[ {"$ref":"#/person_identifier/rememberme_id"}, {"$ref":"#/person_identifier/email"},
{
"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请求中的三个“个人标识符”中的一个,即电子邮件、记忆id或帐号。我无法验证上述模式是否会强制执行所需的约束。
我尝试在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));
例如,JSFIDLE在不应该满足模式的情况下验证数据是否正确满足模式。只允许一个输入标识符。我已经参考了几乎所有关于使用其中一个的可用问题和文档。有没有关于我做错了什么的指示?谢谢。使用
我能为我的问题制定出两个答案。以下是链接:
及
我问题中的模式不正确。该模式意味着匹配(所有三个参考)中的一个,电子邮件,记忆id,买家账号。数据(email和rememberme_id)与person_标识符的email和rememberme_id子资源(单独)匹配。它们与关键字oneOf一起单独出现,因此oneOf从未起作用
使用简单的解释
我理解我的错误。对于其中一个复杂的示例,与上一个链接中提到的示例不同,我们可以在所有子模式中使用一个公共的“属性”,该属性将受到oneOf关键字的限制(“我在上面发布的答案链接中的identifierType”)。这是至关重要的,有这个共同但有区别的因素,使一个工作。此外,我们所引用的其中一个模式中的子模式应该完全存在于oneOf数组(Answer2)中,或者作为引用(Answer1)传递。它们不能和其中一个用逗号分隔,因为这违背了目的(我犯的错误)。我通过@cloudfeet将答案引用到
问题
希望这有帮助