我目前正在尝试使用AJV Json库验证满足某些要求的Json结构。JSON结构场景将是这样的:1场景(有效、正确、必须通过)
{
"QuoteDocuments": {
"CLQuoteXML": {
"QuoteObject": {}
}
}
}
2.场景(有效,必须通过):
{
"QuoteDocuments": {
"CLQuoteDocument": {
"CLQuoteObject": {}
}
}
}
3场景(无效,不正确):
{
"QuoteDocuments": {
"NOTEXIST": {
"NOTHING": {}
}
}
}
4.场景(无效,不正确):
{
"QuoteDocuments": {
"CLQuoteDocument": {
"CLQuoteObject": {}
},
"CLQuoteXML": {
"QuoteObject": {}
}
}
}
1.场景(无效,不正确):
{“QuoteDocuments”:{“CLQuoteDocument”:{“CLQuoteObject”:“字符串”},} }
然而,我有这样的模式规则:
{
"QuoteDocuments": {
"$id": "quoteDocumentsId",
"type": "object",
"errorMessage": {
"type": "The ${0#} property must be an object"
},
"oneOf": [
{
"properties": {
"CLQuoteXML": {
"type": "object",
"required": ["QuoteObject"]
}
},
"required": ["CLQuoteXML"]
},
{
"properties": {
"CLQuoteDocument": {
"type": "object",
"required": ["CLQuoteObject"]
}
},
"required": ["CLQuoteDocument"]
}
]
}
}
但这对我来说不起作用,因为JSON有这样的结构:
{
"QuoteDocuments": {
"CLQuoteDocument": {
"QuoteObject": ""
}
}
}
指示这些验证错误:必须具有必需的属性“CLQuoteXML”必须具有必需的属性“CLQuoteObject”必须与oneOf中的一个架构完全匹配
这是没有意义的,因为在CLQuoteDocument属性已经存在的情况下,它不再需要指示'CLQuoteXML'是必需的,在这种情况下,它只需要指示CLQuoteObject是必需的,因为它是连续的属性。
这意味着,如果json带有CLQuoteXML属性,则不应再指示需要CLQuoteDocument属性,如果json已经具有CLQuoteDocument属性,则不应再指示需要CLQuoteXML。
然后,工作流将是,如果CLQuoteXML属性存在,则它应该仅继续验证规则,这些规则在“CLQuoteXML”下找到,这是请求QuoteObject所需的。
但是如果只有CLQuoteDocument属性而不是CLQuoteXML,那么工作流将停止或执行CLQuoteDocument下的指令,该指令将根据需要请求CLQuoteObject字段。
因为有时候json会有这样的结构:
{
"QuoteDocuments": {
"CLQuoteDocument": {
"CLQuoteObject": {}
}
}
}
要么
{
"QuoteDocuments": {
"CLQuoteXML": {
"QuoteObject": {}
}
}
}
如果json结构不同,将属性更改为该结构,则它应该给予错误。
1条答案
按热度按时间sg2wtvxw1#
假设您使用的是JSON Schema,而不是其他json验证的变体。
您没有对
QuoteObject
必须是什么给出任何约束。给予这个试试,看看是否有效。您没有明确说明验证成功的实际要求。