Що робить інструмент
Конвертер JSON у Go читає приклад JSON і пише визначення структур Go з тегами json, готові для encoding/json. Вставте відповідь API, яке ви викликаєте, і отримайте типи, які одразу можна передати в json.Unmarshal, не виписуючи вручну кожне поле й тег.
Конвертер перевіряє кожне значення в прикладі. Вкладені об’єкти стають окремими структурами, усі елементи масиву об’єднуються в один тип елемента, а поля, яких немає в деяких елементах або які інколи дорівнюють null, визначаються як необов’язкові. Вивід вирівняно так, як це зробив би gofmt.
Як користуватися
- Вставте JSON у поле введення, завантажте файл
.jsonабо натисніть Приклад. - Задайте назву кореневого типу й оберіть, як записувати вкладені об’єкти, які поля отримують
omitemptyі чи використовувати вказівники для полів, що допускають null. - Скопіюйте код Go або завантажте його як файл
.goі додайте рядокpackage.
Некоректний JSON позначається рядком і стовпцем помилки.
Приклад
Цей JSON:
{ "id": 7, "user_name": "ada", "tags": ["admin"], "profile": { "avatar_url": "https://example.com/a.png" } }
перетворюється на такі структури:
type Root struct {
ID int `json:"id"`
UserName string `json:"user_name"`
Tags []string `json:"tags"`
Profile Profile `json:"profile"`
}
type Profile struct {
AvatarURL string `json:"avatar_url"`
}
Поради
- Один приклад показує лише те, що в ньому є. Якщо значення може бути числом або рядком, додайте обидва варіанти чи помістіть кілька прикладів у масив, щоб вони об’єдналися.
- Мітки часу надходять рядками. Змініть тип на
time.Timeсамостійно, якщо формат — RFC 3339. - Об’єкти з однаковими полями використовують одну структуру, тож вивід лишається коротким, коли та сама форма трапляється в кількох місцях.
- Пишете й на TypeScript? Генератор JSON у TypeScript використовує те саме виведення типів для інтерфейсів.
Часті запитання
› Як обираються назви полів?
Кожен ключ JSON перетворюється на експортовану назву Go у PascalCase, а поширені абревіатури пишуться великими літерами, як очікує golint, тож user_id стає UserID, а avatar_url — AvatarURL. Початковий ключ зберігається в тегу json, тому encoding/json точно зіставляє поля.
› Які типи Go використовуються?
Рядки стають string, цілі числа — int (або int64, якщо значення не вміщається в 32 біти), дробові — float64, логічні значення — bool. Масиви стають зрізами, порожні об'єкти — map[string]any, а значення, що бувають лише null або змішують кілька видів, — any.
› Чим відрізняються іменовані та вбудовані структури?
Іменований режим записує кожен вкладений об'єкт як окремий тип, наприклад Address чи Order, що спрощує повторне використання й тестування. Вбудований режим розміщує анонімні типи struct просто в батьківській структурі й тримає все в одному оголошенні, як роблять багато швидких конвертерів.
› Коли додається omitempty?
Типово лише до необов'язкових полів, тобто тих, яких немає в деяких об'єктах масиву або які інколи дорівнюють null. Можна також додати його до всіх полів або до жодного. Увімкніть вказівники, щоб відрізняти відсутнє значення чи null від нульового.
› Чи завантажується мій JSON?
Ні. Структури генеруються у браузері, і нічого не надсилається на сервер.