[英]AJV schema validation for nested object
Functions returns object which looks something like this: 函数返回的对象看起来像这样:
{
"answer": {
"vehicle_type": 1,
"message": "Car"
},
"model": "VW",
"color": "red"
}
'Answer' object is always there. “答案”对象始终存在。 Other fields are there based on 'vehicle_type'.
其他字段基于“ vehicle_type”。
Eg 例如
if vehicle_type = 1 there are 'model' and 'color'. 如果vehicle_type = 1,则有“模型”和“颜色”。
if vehicle_type = 2 there are 'engine_count', 'seat_count' and 'wing_count'. 如果vehicle_type = 2,则有'engine_count','seat_count'和'wing_count'。
I am trying to write JSON-schema which I will use to validate returned object. 我正在尝试编写JSON模式,用于验证返回的对象。
I would like to set 'model' and 'color' as required properties if 'vehicle_type' is 1. And if 'vehicle_type' is 2, then 'engine_count', 'seat_count' and 'wing_count' are required. 如果'vehicle_type'为1,我想将'model'和'color'设置为必需属性。如果'vehicle_type'为2,则需要'engine_count','seat_count'和'wing_count'。
I am using AJV ( https://github.com/epoberezkin/ajv ) schema validator. 我正在使用AJV( https://github.com/epoberezkin/ajv )模式验证器。
For me, it's problematic because vehicle_type is nested inside 'answer', and properties which I want to mark as required are on the parent object. 对我来说,这是有问题的,因为vehicle_type嵌套在“答案”内部,而我要标记为必需的属性位于父对象上。 In other words, 'validation_type' is not on the same level as 'model' or 'engine_count'.
换句话说,“ validation_type”与“ model”或“ engine_count”不在同一级别。
I already several different approached... I also tried with ajv-keywords (switch, if/else/then) but i didn't have any luck 我已经采用了几种不同的方法...我也尝试过ajv-关键字(切换,如果/否则/然后),但是我没有任何运气
Any ideas? 有任何想法吗?
You can use "oneOf" property for that. 您可以为此使用“ oneOf”属性。
Where you will have "one of" a vehicle type 1, or a type 2. Type 1 has certain required properties while type 2 has different required properties. 您将拥有车辆类型1或类型2的“其中之一”。类型1具有某些必需的属性,而类型2具有不同的必需属性。
For example: 例如:
{
"$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"
]
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.