Перейти до вмісту

Конвертувати JSON у TypeScript, Go, Python та інші мови

Вставте приклади JSON і отримайте інтерфейси TypeScript, схеми Zod, структури Go, а також типи для Python, Java, C#, Kotlin, Swift і Rust. Усе генерується у вашому браузері.

Кілька зразків (поспіль або у форматі JSON Lines) та обʼєкти всередині масивів обʼєднуються: ключі, яких десь немає, стають необовʼязковими, а значення null — такими, що допускають null.

TypeScript
Вставте зразок і натисніть «Згенерувати типи».
Оголосити як
Працює у браузері · без надсилання на серверЯк це працює

Як користуватися: JSON у типи

  1. 1

    Вставте зразки JSON

    Вставте одну відповідь, масив записів або кілька відповідей поспіль; приклад показує двох обʼєднаних користувачів.

  2. 2

    Оберіть мову

    Виберіть TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift або Rust і налаштуйте стиль для неї.

  3. 3

    Назвіть кореневий тип

    Вкажіть імʼя типу верхнього рівня, наприклад User або OrderResponse.

  4. 4

    Згенеруйте й скопіюйте

    Натисніть «Згенерувати типи», потім скопіюйте код або завантажте його; після змін код генерується заново автоматично.

Ліміти та Pro

Безкоштовно й без реєстрації: 9 мов виводу з 3 стилями Python, будь-яка кількість обʼєднаних зразків і файли до 20 MB; генерація зупиняється через 30 секунд.

Pro прибирає рекламу; генератор однаковий в усіх тарифах. Дивитися Pro

Про інструмент: JSON у типи

Писати типи вручну для відповіді API довго, і легко помилитися, особливо коли дані вкладені на три рівні. Вставте один чи кілька зразків JSON, і генератор визначить структуру та напише готові до використання визначення для дев’яти мов: інтерфейси або псевдоніми типів TypeScript, TypeScript зі схемами Zod для перевірки під час виконання, структури Go з тегами json, dataclass, TypedDict або моделі Pydantic v2 для Python, records Java з анотаціями Jackson, класи C# для System.Text.Json, data class Kotlin для kotlinx.serialization, структури Swift Codable і структури Rust для serde.

Один зразок рідко показує всі поля, тому генератор обʼєднує стільки зразків, скільки ви надасте. Вставте кілька документів поспіль, JSON Lines або масив обʼєктів: ключ, якого бракує в деяких обʼєктах, стане необовʼязковим, ключ, що подекуди дорівнює null, стане nullable, ціле число, яке подекуди трапляється дробовим, стане float, а справді змішані значення стануть обʼєднанням (union) або динамічним типом JSON цієї мови. Вкладені обʼєкти отримують власні іменовані типи: orders стає Order, addresses стає Address. Однакові структури генеруються один раз і використовуються повторно. Обʼєкти, ключами яких є числа, UUID або дати, перетворюються на словники (map).

Назви полів приводяться до конвенцій кожної мови, а ключі JSON, що відрізняються, наприклад first-name або class, звʼязуються з полями за допомогою відповідної анотації, псевдоніма або CodingKeys. Коментарі та кінцеві коми у зразку допускаються.

Результат описує лише надані вами зразки: генератор не може знати про поля чи значення, яких у них немає, тому перевірте код за документацією до вашого API, перш ніж на нього покладатися.

Приватність

Зразки розбираються, а код генерується Web Worker у цій вкладці, тому відповіді API з особистими чи внутрішніми даними нікуди не надсилаються. Налаштування мови й іменування зберігаються в локальному сховищі, а вставлений вами JSON не зберігається.

Можливості

Обʼєднує багато зразків

Відсутні ключі стають необовʼязковими, а значення null — nullable в усіх зразках, які ви вставили.

9 мов

TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift і Rust з ідіоматичними іменами.

Зіставлення ключів

Теги json, псевдоніми, @SerialName, @JsonProperty і CodingKeys зберігають початкові назви з JSON.

JSON у типи: поширені запитання

Як визначається, які поля необовʼязкові?
Поле необовʼязкове, якщо хоча б в одному з обʼєктів на цій позиції немає такого ключа. Якщо ви вставили один обʼєкт, усі поля обовʼязкові, бо нічого не свідчить про протилежне. Вставте кілька реальних відповідей або масив записів, щоб генератор побачив, які ключі зʼявляються, а які ні. Для часткових даних і patch-запитів є параметр «Зробити всі поля необовʼязковими».
Що буде, якщо значення подекуди дорівнює null?
Поле стане nullable: string | null у TypeScript, вказівник у Go, str | None у Python, String? у Kotlin і Swift, Option<String> у Rust і обгорнутий або nullable тип у Java та C#. Якщо поле дорівнює null в усіх зразках, тип визначити неможливо, тому воно отримає невідомий або динамічний тип JSON цієї мови.
Чому цілі числа стали дробовими?
Якщо в одному зразку для поля вказано 7, а в іншому 7.5, тип має вмістити обидва значення, тож стає float або double. Числа із десятковою крапкою, наприклад 10.0, теж вважаються дробовими. У TypeScript обидва типи — number; у Zod поле лише з цілими перевіряється через z.number().int().
Це те саме, що quicktype?
Він розвʼязує ту саму задачу власним генератором, який працює повністю у вашому браузері, і додає дещо своє: три стилі Python разом із TypedDict, схеми Zod та обʼєднання кількох вставлених документів. quicktype підтримує більше мов і вміє читати JSON Schema. Для дев’яти мов тут результат розрахований на компіляцію без додаткових допоміжних бібліотек.
Чи розпізнає він дати, enum або UUID?
Ні. Рядки лишаються рядками, бо кількох зразків замало, щоб довести, що кожне майбутнє значення буде датою чи одним із фіксованого набору. Змініть згенерований тип вручну на Date, time.Time, datetime, enum або тип UUID там, де ваш API це гарантує. Виняток — обʼєкти з ключами UUID, числами чи датами: вони стають словниками.