【发布时间】:2021-06-02 08:11:40
【问题描述】:
我正在创建一个用于 Postman 的 JSON 模式,其中包含一些模式定义。我针对架构验证的 JSON 需要与架构定义之一匹配。
示例架构
{
"oneOf": [
{
"$ref": "#/definitions/schema1"
},
{
"$ref": "#/definitions/schema2"
},
{
"$ref": "#/definitions/schema3"
}
],
"definitions": {
"schema1": {
"type": "object",
"properties": {
"propertyA": {
"type": "string"
}
},
"required": [
"propertyA"
]
},
"schema2": {
"type": "object",
"properties": {
"propertyB": {
"type": "string"
}
},
"required": [
"propertyB"
]
},
"schema3": {
"type": "object",
"properties": {
"propertyC": {
"type": "string"
}
},
"required": [
"propertyC"
]
}
}
}
JSON 数据示例
此 JSON 已针对架构进行验证并正确标记为无效(因为需要字符串):
{
"propertyA": 123
}
问题
本例根据https://www.jsonschemavalidator.net/返回4个错误:
- 消息:JSON 对来自“oneOf”的无模式有效。架构路径: #/oneOf
- 消息:类型无效。预期字符串,但得到整数。架构路径: #/definitions/schema1/properties/propertyA/type
- 消息:对象缺少必需的属性:propertyC。
架构路径:#/definitions/schema3/required - 消息:对象:propertyB 中缺少必需的属性。
架构路径:#/definitions/schema2/required
我只对说它需要一个字符串的错误消息感兴趣。 如何在将架构定义保存在 1 个文件中的同时避免其他错误消息?
【问题讨论】:
-
想象你有一个类似 oneof string, number 但 gut null 的模式。您希望验证抛出哪个错误?它的逻辑相同,验证不知道你对哪一个感兴趣,因为一切都是无效的
-
@PDHide 我从您的评论中了解到,验证不知道要针对哪个架构进行验证,因此要针对所有架构进行验证。所以我想真正的问题是,如何避免这种情况。 Jason Desrosiers 的回答似乎很有希望解决这个问题。
-
是的,答案真的很好
标签: json postman jsonschema