我有许多对象(消息)需要根据JSON模式(draft-04)进行验证.每个对象都保证有一个"类型"字段,它描述了它的类型,但每个类型都有一组完全不同的其他字段,因此每种类型的对象都需要一个唯一的模式.
我看到了几种可能性,其中没有一种特别吸引人,但我希望我错过了一些东西.
可能性1:对每种消息类型使用oneOf.我想这会起作用,但问题是很长的验证错误以防出现问题:验证器倾向于报告每个失败的模式,其中包括"oneOf"数组中的所有元素.
{
"oneOf":
[
{
"type": "object",
"properties":
{
"t":
{
"type": "string",
"enum":
[
"message_type_1"
]
}
}
},
{
"type": "object",
"properties":
{
"t":
{
"type": "string",
"enum":
[
"message_type_2"
]
},
"some_other_property":
{
"type": "integer"
}
},
"required":
[
"some_other_property"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
可能性2:嵌套"如果","然后","其他"三合会.我没有尝试过,但我想在这种情况下错误可能会更好.然而,写起来非常麻烦,因为嵌套如果堆积如山.
可能性3:针对"t"的每个可能值的单独方案.这是最简单的解决方案,但我不喜欢它,因为它阻止我在模式中使用公共元素(通过引用).
那么,这些是我唯一的选择,还是我能做得更好?
jsonschema ×1