DevToolPal
UK

JSON у структуру Go

Генерує структури Go з тегами json за прикладом JSON: іменовані або вбудовані вкладені структури та omitempty.

Працює локально, нічого не завантажується на сервер

Параметри

Вкладені об'єкти

JSON

0 симв. · 0 B

Go

0 симв. · 0 B

Що робить інструмент

Конвертер JSON у Go читає приклад JSON і пише визначення структур Go з тегами json, готові для encoding/json. Вставте відповідь API, яке ви викликаєте, і отримайте типи, які одразу можна передати в json.Unmarshal, не виписуючи вручну кожне поле й тег.

Конвертер перевіряє кожне значення в прикладі. Вкладені об’єкти стають окремими структурами, усі елементи масиву об’єднуються в один тип елемента, а поля, яких немає в деяких елементах або які інколи дорівнюють null, визначаються як необов’язкові. Вивід вирівняно так, як це зробив би gofmt.

Як користуватися

  1. Вставте JSON у поле введення, завантажте файл .json або натисніть Приклад.
  2. Задайте назву кореневого типу й оберіть, як записувати вкладені об’єкти, які поля отримують omitempty і чи використовувати вказівники для полів, що допускають null.
  3. Скопіюйте код 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?

Ні. Структури генеруються у браузері, і нічого не надсилається на сервер.