JSON Schema: проверка и генерация
Проверяйте JSON по схеме или выводите схему из примера данных
Об этом инструменте
Две стороны одной дисциплины: вставьте пример JSON и получите выведенную из него схему draft-07 — или вставьте данные вместе со схемой и увидьте каждое нарушение с его JSON-путём. Валидация работает на Ajv — том же движке, что используют большинство Node-сервисов, — поэтому что проходит здесь, пройдёт и в CI.
Вывод схемы ориентирован на продакшен: ключи объектов становятся типизированными свойствами и записями required, массивы объединяют формы всех своих элементов, целые числа отличаются от дробных, а ключи, встречающиеся лишь в части элементов массива, корректно не попадают в required. Результат — отправная точка, которую вы ужесточаете форматами, диапазонами и шаблонами.
Ответы API и конфигурационные файлы — ровно те данные, которые меньше всего хочется видеть на чужом сервере. И вывод схемы, и валидация выполняются целиком в вашем браузере.
Частые вопросы
- Какой драфт JSON Schema поддерживается?
- Вывод генерирует draft-07 — наиболее широко поддерживаемый драфт среди редакторов и валидаторов. Валидация принимает draft-07 и более ранние драфты, которые Ajv понимает в нестрогом режиме; ключевые слова 2019-09/2020-12 в основном тоже работают, поскольку неизвестные ключевые слова игнорируются, а не считаются фатальными.
- Что означает $ в путях нарушений?
- Это корень документа в стиле JSONPath: $.age — свойство age верхнего уровня, $.items.2.name — name третьего элемента массива. Пустой путь ($) означает, что нарушение касается самого корня документа — неверный тип или отсутствующее обязательное свойство.
- Почему выведенная схема строже или мягче, чем я ожидал?
- Она описывает ровно тот пример, что вы дали: поля, присутствующие везде, становятся required, и разрешены только наблюдавшиеся типы. Дайте более разнообразный пример (массив репрезентативных объектов) для более общей схемы, а затем доработайте вручную — вывод не может знать ваших намерений.
- Поддерживает ли валидация format, pattern и другие ключевые слова-ограничения?
- Структурные ключевые слова (type, required, properties, items, enum, minimum, pattern…) применяются полностью. Строки format вроде "email" или "date-time" не проверяются — это отражает спецификацию JSON Schema, где format по умолчанию является аннотацией, и оберегает от ложной уверенности.