#json #jsonschema
#json #jsonschema
Вопрос:
Пожалуйста, мне нужна помощь, у меня есть большой файл, который мне нужен для проверки некоторых данных. Для полей с теми же свойствами это работает с использованием приведенного ниже кода. Но у меня также есть поля, которые не находятся под теми же «свойствами».
"if": {
"properties": {
"type": { "const": "one" }
}
},
"then": { "required": ["test"] } }
Итак, что я делаю, так это добавляю ссылочный путь к требуемому оператору. Я пробовал это
"then": { "required": {"$ref" : "#/path/example" }}
но это не сработало. Есть идеи, могу ли я использовать ссылочный путь внутри required и если да, то как?
Комментарии:
1. Пожалуйста, прочитайте json-schema.org/understanding-json-schema/reference /… .
2. Я сделал и я понимаю структуру json, но я не мог найти решение для этого. Я предполагаю, что это допустимо, но я не знаю, почему это не работает (кстати, я оборачиваю это внутри allOf)
3. Вы можете использовать только
$ref
там, где ожидается схема.required
ожидает массив строк, поэтому$ref
не допускается. Я не понимаю, что вы пытаетесь сделать. Если вы отредактируете свой вопрос с более подробной информацией, тогда я, возможно, смогу предложить альтернативную схему, в которой вам не нужна$ref
.4. Моя проблема в том, что требуемое поле не соответствует тому же пути свойств «type», так как я могу сослаться на него в required поле (мне нужно указать его путь, но, как вы сказали, я не могу использовать ref внутри required). Достаточно ли я объяснил свою проблему?
5. В приведенном выше примере «тип» и «тест» находятся под одними и теми же «свойствами», но что, если я хочу, чтобы поле в #path / example было обязательным, как указать его путь внутри required. Я ценю любую помощь
Ответ №1:
Я думаю, что вы пытаетесь выразить то, что если /type
есть "one"
, то /path/example
требуется.
Итак, они должны быть допустимыми:
{
"type": "one",
"path": { "example": 42 }
}
{
"type": "two",
"path": { "foo": 42 }
}
И это не должно быть допустимым:
{
"type": "one",
"path": { "foo": 42 }
}
Вот как мы можем это сделать:
"if": {
"properties": {
"type": { "const": "one" }
}
},
"then": {
"properties": {
"path": { "required": ["example"] }
},
"required": ["path"]
}
Вам нужно установить путь с помощью properties
(возможно, нескольких вложенных properties
, если вам нужно пройти более двух уровней) и использовать required
на каждом уровне.
(Если я все еще не понимаю ваш вопрос, дайте мне знать, и мы сможем попробовать еще раз)