Любые предложения, как это сделать с AJV или любой другой библиотекой?
Если вы открыты для простого подхода, основанного на структурных схемах, тогда, пожалуйста, продолжайте читать.
Программа командной строки jq может использоваться для проверки схем JSON.
Это можно сделать различными способами.В этом ответе я сосредоточусь на использовании механизма вывода схемы (который я написал), доступного по адресу https://gist.github.com/pkoppstein/a5abb4ebef3b0f72a6ed
. Этот механизм вывода создает простую для чтения схему в форме JSON.документ, который имеет ту же структуру, что и рассматриваемые сущности JSON.
Для иллюстрации давайте сначала предположим:
Теперь вызывая jq в командной строке следующим образом:
jq 'include "schema" {"search": "~/.jq"}; [.[]] | schema
' survey_questions.json
создает предполагаемую структурную схему:
{
"question": "string",
"answers": [
"string"
]
}
Это можно прочитать следующим образом: каждый вопрособъект JSON, содержащий не более двух ключей:
Обратите внимание на эту схему.jq не делает выводов относительно длины массивов.Чтобы проверить, что каждый массив «ответов» имеет длину не менее 2, нужно будет сделать это отдельно.
Теперь предположим, что мы добавили третье возможное значение, число, к одному из разрешенных «ответов».
Тогда выведенная схема будет выглядеть следующим образом:
{
"question": "string",
"answers": [
"scalar"
]
}
Обратите внимание, что answers
теперь считается массивом скаляров.
Сводка
В итогеесли предполагаемая схема набора документов или сущностей JSON может быть выражена «структурным» способом, поддерживаемым schema.jq, то проверку схемы можно выполнить путем сравнения выведенной схемы с ожидаемой схемой.