У меня есть сценарий использования, в котором я хочу проверить наличие ключей в JSON, в зависимости от значения другого ключа.
Пример JSON -1:
{
"key_name" : "value1",
"foo" : "random_value1"
}
Пример JSON -2:
{
"key_name" : "value2",
"bar" : "random_value2"
}
Согласно этим примерам,
Правило 1. Если значением «key_name» является «value1», то only ключ «foo» должен присутствовать в JSON.
Правило 2. Если значение «key_name» равно «value2», тогда only ключ «bar» должен присутствовать в JSON.
Я написал следующую JSON схему для проверки этих JSON:
{
"type": "object",
"properties": {
"key_name": {
"type": "string",
"enum": [
"value1",
"value2"
]
},
"foo": {
"type": "string"
},
"bar": {
"type": "string"
}
},
"required": [
"key_name"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"key_name": {
"enum": [
"value1"
]
}
}
},
"then": {
"required": [
"foo"
]
}
},
{
"if": {
"properties": {
"key_name": {
"enum": [
"value2"
]
}
}
},
"then": {
"required": [
"bar"
]
}
}
]
}
Теперь, согласно правилам, следующие JSON недопустимы и должны вызвать ошибку.
{
"key_name" : "value1",
"foo" : "random_value1",
"bar" : "random_value2"
}
ИЛИ
{
"key_name" : "value2",
"bar" : "random_value2",
"foo" : "random_value"
}
Но, выше JSON Схема не может сделать это. Он только проверяет, является ли ключ «foo» / «bar» или нет, согласно значению «key_name». Не удается проверить наличие какого-либо нового ключа.
Как go об этом?