gpt4 book ai didi

javascript - 嵌套对象的 AJV 模式验证

转载 作者:行者123 更新时间:2023-12-01 03:33:48 28 4
gpt4 key购买 nike

函数返回看起来像这样的对象:

    {
"answer": {
"vehicle_type": 1,
"message": "Car"
},
"model": "VW",
"color": "red"
}

“答案”对象始终存在。其他字段基于“vehicle_type”。

例如

如果vehicle_type = 1,则有“型号”和“颜色”。

如果vehicle_type = 2,则有“engine_count”、“seat_count”和“wing_count”。

我正在尝试编写 JSON 模式,我将用它来验证返回的对象。

如果“vehicle_type”为 1,我想将“model”和“color”设置为必需属性。如果“vehicle_type”为 2,则需要“engine_count”、“seat_count”和“wing_count”。

我正在使用 AJV ( https://github.com/epoberezkin/ajv ) 架构验证器。

对我来说,这是有问题的,因为vehicle_type嵌套在“answer”内,而我想要标记为必需的属性位于父对象上。换句话说,“validation_type”与“model”或“engine_count”不在同一级别。

我已经采用了几种不同的方法...我也尝试过使用ajv关键字(switch,if/else/then),但我没有任何运气

有什么想法吗?

最佳答案

您可以使用“oneOf”属性来实现这一点。

您将拥有车辆类型 1 或类型 2 中的“一种”。类型 1 具有某些必需的属性,而类型 2 具有不同的必需属性。

例如:

{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "http://some.site.somewhere/entry-schema#",
"oneOf": [
{"$ref": "#/definitions/type1"},
{"$ref": "#/definitions/type2"}
],
"definitions": {
"type1": {
"type": "object",
"properties": {
"answer": {
"type": "object",
"properties": {
"vehicle_type": {
"type": "integer",
"enum": [1]
},
"message": {
"type": "string"
}
}
},
"model": {
"type": "string"
},
"color": {
"type": "string"
}
},
"required": [
"model",
"color"
]
},
"type2": {
"type": "object",
"properties": {
"answer": {
"type": "object",
"properties": {
"vehicle_type": {
"type": "integer",
"enum": [2]
},
"message": {
"type": "string"
}
}
},
"engine_count": {
"type": "integer"
},
"seat_count": {
"type": "integer"
},
"wing_count": {
"type": "integer"
}
},
"required": [
"engine_count",
"seat_count",
"wing_count"
]
}
}
}

关于javascript - 嵌套对象的 AJV 模式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44400237/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com