如何在架构中使用嵌套 JSON
How to use nested JSON in schema
正在尝试按如下方式设置嵌套架构。如果存在 aa.a 时存在 bb.c,我希望能够拒绝架构。
我试过不使用 xor
{
Joi.object().keys({
aa: Joi.object().keys({
a: Joi.string(),
b: Joi.string()
}).unknown(true).with("a", "b"),
bb: Joi.object().keys({
c: Joi.string()
}).unknown(true)
}).xor( "aa.a" , ["bb.c"])
}
使用以下对象 xor 失败并出现 ValidationError:"value" 必须至少包含 [aa.a、bb.c] 之一,但 aa.a 存在于提供的值中
{
"aa": {
"a": "fg",
"b": "fg"
},
"bb": {
"c": "l"
}
}
如果我尝试
.without( "aa.a" , ["bb.c"])
然后架构通过,尽管在我看来它不应该通过,因为当 bb.c 与 aa.a
一起出现时应该会失败
难道是因为这两个东西嵌套在其他对象中?
我们能不能像这样指定深度链接的东西?
提前致谢
您可以使用 Joi.when()
并创建如下模式:
Joi.object({
aa: Joi.object().keys({
a: Joi.string(),
b: Joi.string()
}).unknown(true).with('a', 'b'),
bb: Joi.object().keys({
c: Joi.string()
}).unknown(true)
.when('aa.a', {
is: Joi.exist(),
then: Joi.object({ c: Joi.forbidden() })
})
});
基本上,如果 aa.a 存在,那么 bb.c 是不允许的,并且该模式将无法通过验证。使用此架构,您的示例将如您所料失败。
正在尝试按如下方式设置嵌套架构。如果存在 aa.a 时存在 bb.c,我希望能够拒绝架构。
我试过不使用 xor
{
Joi.object().keys({
aa: Joi.object().keys({
a: Joi.string(),
b: Joi.string()
}).unknown(true).with("a", "b"),
bb: Joi.object().keys({
c: Joi.string()
}).unknown(true)
}).xor( "aa.a" , ["bb.c"])
}
使用以下对象 xor 失败并出现 ValidationError:"value" 必须至少包含 [aa.a、bb.c] 之一,但 aa.a 存在于提供的值中
{
"aa": {
"a": "fg",
"b": "fg"
},
"bb": {
"c": "l"
}
}
如果我尝试
.without( "aa.a" , ["bb.c"])
然后架构通过,尽管在我看来它不应该通过,因为当 bb.c 与 aa.a
一起出现时应该会失败难道是因为这两个东西嵌套在其他对象中?
我们能不能像这样指定深度链接的东西?
提前致谢
您可以使用 Joi.when()
并创建如下模式:
Joi.object({
aa: Joi.object().keys({
a: Joi.string(),
b: Joi.string()
}).unknown(true).with('a', 'b'),
bb: Joi.object().keys({
c: Joi.string()
}).unknown(true)
.when('aa.a', {
is: Joi.exist(),
then: Joi.object({ c: Joi.forbidden() })
})
});
基本上,如果 aa.a 存在,那么 bb.c 是不允许的,并且该模式将无法通过验证。使用此架构,您的示例将如您所料失败。