Конвертировать JSON в схему JSON — Numio
Выводит JSON Schema (draft-07) по образцу JSON. Для массивов объектов все элементы объединяются: ключ, отсутствующий или равный null в некоторых элементах, не попадает в required.
Создание первой схемы валидации для ответа API или payload вебхука по собранным примерам.
Когда пригодится
- Создание первой схемы валидации для ответа API или payload вебхука по собранным примерам.
- Получение схемы для Ajv, OpenAPI или следующего шага JSON Schema → TypeScript/Zod.
Как пользоваться
- Вставьте образец JSON в левый редактор или откройте файл в кодировке UTF-8 кнопкой загрузки файла. Массив из нескольких записей даёт более точные списки required.
- Изучите схему: в одиночном объекте все ключи обязательны (required), а ключи, отсутствующие или равные null в некоторых элементах массива, необязательны.
- Скопируйте схему и добавьте ограничения, которые образец показать не может: форматы, enum, integer и minimum.
Образец JSON
[
{ "id": 1, "name": "Ada", "email": null },
{ "id": 2, "name": "Lin", "email": "lin@example.com" }
]JSON Schema (draft-07)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Generated schema for Root",
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
},
"required": [
"id",
"name"
]
}
}Подробности и ограничения
Числа всегда получают "type": "number"; integer, форматы (email, date-time), enum и pattern не выводятся. Заголовок всегда "Generated schema for Root".
Поле, равное null везде, получает пустую схему {}. null рядом с другими значениями считается признаком необязательности, а не типом null.
Массивы смешанных типов вроде [1, "x"] становятся кортежем (список items с additionalItems: false); пустой массив даёт items: {}.
Генерируется в браузере с помощью json_typegen, скомпилированного в WebAssembly. Для невалидного JSON (в том числе с висячими запятыми) показывается ошибка разбора JSON, а одиночное значение вроде 42 отклоняется, так как у него нет структуры.
FAQ
Какой драфт JSON Schema используется в выводе?
Draft-07, объявленный как "$schema": "http://json-schema.org/draft-07/schema#". Выбрать 2019-09 или 2020-12 нельзя.
Как определяются необязательные поля?
Только по элементам одного массива: ключ, отсутствующий в некоторых объектах или равный в них null, не попадает в required. В одиночном объекте все ключи обязательны.
Можно ли преобразовать JSON-массив на верхнем уровне?
Да. Корень получает "type": "array", а элементы объединяются в одну схему items, как в примере.