JSON в Go
Пока нет содержимого
Вставьте JSON слева, и определения типов struct Go, готовые к прямому использованию в проектах Go, автоматически сгенерируются справа. Чисто локальная обработка в браузере, не требует регистрации или загрузки.
Пока нет содержимого
Вставьте JSON слева, и определения типов struct Go, готовые к прямому использованию в проектах Go, автоматически сгенерируются справа. Чисто локальная обработка в браузере, не требует регистрации или загрузки.
JSON в Go — это процесс автоматического преобразования данных в формате JSON в определения типов struct языка Go. JSON — самый распространенный формат обмена данными в REST API, конфигурационных файлах, очередях сообщений и журналах, в то время как Go — строготипизированный язык; во время разработки динамическая структура JSON часто должна сопоставляться со struct перед десериализацией с encoding/json. Написание struct вручную, особенно вложенных объектов, легко приводит к пропущенным полям или неправильным типам; этот инструмент направлен на автоматизацию повторяющейся работы.
Struct в Go — это составной тип данных, объявляемый как `type Name struct { ... }`. Каждое поле состоит из имени и типа; имена полей должны начинаться с заглавной буквы, чтобы быть доступными из других пакетов, так называемые «экспортируемые идентификаторы». Инструмент автоматически преобразует имена полей JSON в экспортируемые имена полей в PascalCase, например `user_name` сопоставляется с `UserName`, с сохранением исходного ключа в json-теге.
Основное преобразование этого инструмента выполняется встроенным в браузер Web Worker jsonFormat, который вызывает рендерер Go quicktype-core с опциями `just-types` и `no-comments`. Весь процесс не зависит от серверных служб: вводимый JSON парсится локально, типы выводятся, код Go генерируется, наконец, представляется в правом редакторе.
Вывод типов следует обычному сопоставлению JSON с Go: строки сопоставляются с `string`, булевы значения с `bool`, целые числа с `int64`, числа с плавающей точкой с `float64`, массивы со срезами `[]T`, объекты с независимыми структурами, `null` с `interface{}`. Вложенные объекты обрабатываются рекурсивно, сохраняя четкую иерархию.
По сравнению с ручным написанием, сгенерированный инструментом код — это «работающий первый черновик». Разработчикам обычно нужно только тонко настроить имя корневого типа, имя пакета, точность типов полей (например int64 в int) и использовать ли типы указателей, прежде чем размещать в реальных проектах Go. В сочетании с копированием одним кликом и загрузкой model.go повторяющаяся работа на этапах интеграции и моделирования значительно сокращается.
После копирования сгенерированной struct в проект напрямую десериализуйте ответ API с помощью encoding/json.
package main
import (
"encoding/json"
"fmt"
)
// 以下代码由 GeekFormat JSON 转 Go 工具生成
type User struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
Address Address `json:"address"`
}
type Address struct {
City string `json:"city"`
}
func main() {
data := []byte(`{
"id": 1,
"name": "Alice",
"tags": ["admin", "dev"],
"address": {"city": "Beijing"}
}`)
var u User
if err := json.Unmarshal(data, &u); err != nil {
panic(err)
}
fmt.Println(u.Name, u.Address.City)
}Если некоторые поля API могут не существовать, измените соответствующие поля на типы указателей или используйте с тегом omitempty.
package main
import "encoding/json"
// 手动将字段改为指针,缺失时值为 nil
type User struct {
ID *int64 `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Email *string `json:"email,omitempty"`
}
func main() {
data := []byte(`{"id": 1, "name": "Bob"}`)
var u User
json.Unmarshal(data, &u)
if u.Email == nil {
println("Email 字段缺失")
}
}Вставьте содержимое JSON в левое поле ввода, инструмент автоматически преобразует за 400мс и отобразит сгенерированную struct Go справа. Вы также можете перетащить файлы .json/.txt или нажать «Пример» для загрузки встроенных данных. После преобразования скопируйте или загрузите файл model.go одним кликом.
Да. Инструмент генерирует код Go на основе quicktype-core, и по умолчанию каждое поле struct снабжается тегом `json:"исходное_имя_поля"`, удобным для прямой сериализации и десериализации с помощью Unmarshal/Marshal из encoding/json.
Да. Массивы JSON генерируют соответствующие типы срезов на основе типов элементов, например `["a","b"]` генерирует `[]string`, `[1,2,3]` генерирует `[]int64`, `[{...},{...}]` генерирует пользовательские типы вроде `[]UserItem`.
Да. Каждый вложенный объект рекурсивно генерирует независимый тип struct, именуемый в PascalCase. Например, объект `address` генерирует struct `Address`, на которую ссылается основная struct через поле `Address Address`.
Значения null в JSON обычно выводятся как `interface{}`, что является безопасным резервным типом. Если вы знаете фактический тип поля, вы можете добавить пример значения в JSON, перегенерировать, а затем вручную настроить конкретный тип.
Да. Инструмент по умолчанию использует имя корневого типа (например User); после изменения имени корневого типа в настройках все связанные имена подтипов синхронно обновляются, имя загружаемого файла также изменится соответствующим образом.
Инструмент автоматически определяет валидность JSON. Если есть распространенные ошибки вроде конечных запятых, одинарных кавычек, пропущенных кавычек, появится кнопка «Исправить JSON». При нажатии инструмент попытается автоматически исправить и перегенерировать struct Go; при неудачном исправлении будет указано конкретное местоположение ошибки.
Нет. Весь парсинг JSON, вывод типов и генерация кода Go выполняются в вашем браузере через Web Worker; введенное содержимое и сгенерированный код никогда не загружаются ни на какой сервер и не записываются в облако. Чувствительный JSON, содержащий API-ключи, токены или бизнес-данные, можно использовать безопасно.
Да. Сгенерированный код — это стандартная struct Go с json-тегами, можно напрямую скопировать в каталог types/ или models/ проекта. Мы рекомендуем тонко настроить имена типов и имена пакетов в соответствии с соглашениями об именовании проекта.
Полностью бесплатный, не требует регистрации или входа. Откройте страницу и используйте сразу, без ограничений функций, водяных знаков или принудительного входа.
Инструмент не имеет строгих ограничений на размер файла, но скорость преобразования и производительность рендеринга зависят от производительности браузера и устройства. Мы рекомендуем обрабатывать JSON в пределах 1 МБ для лучшего опыта; для слишком большого JSON сначала обработайте через форматировщик JSON или инструмент разделения.
Нет. Инструмент различает целые числа и числа с плавающей точкой: целочисленные поля генерируют int64, поля с плавающей точкой генерируют float64. Если вы предпочитаете более конкретные типы вроде int, uint64, замените вручную после генерации.
Левое поле ввода пустое или содержит только пробельные символы. Пожалуйста, вставьте действительный JSON, или нажмите «Пример» для загрузки данных, или перетащите файлы .json/.txt.
Нажмите кнопку «Исправить JSON» под полем ввода; инструмент автоматически попытается исправить конечные запятые, одинарные кавычки, пропущенные кавычки, объекты в стиле JS и другие проблемы. Измененный результат будет выделен после исправления.
Инструмент генерирует имена полей в PascalCase из ключей JSON. Если ключи содержат китайский язык или специальные символы, могут генерироваться экранированные имена полей. Мы рекомендуем изменить ключи JSON на строчный английский или snake_case, затем единообразно настроить после генерации.
Поскольку null не может вывести конкретный тип, инструмент использует interface{} как резерв. Вы можете дать этому полю пример значения (например "" или 0) в исходном JSON, перегенерировать, а затем изменить тип на фактический, например string/int64.
Рендеринг в браузере слишком большого JSON и большого количества struct потребляет значительную память. Рекомендации: ① Оставляйте только ключевые поля в примере JSON; ② Разделите на несколько объектов и преобразуйте отдельно; ③ Закройте другие потребляющие память вкладки в браузере.
Когда массив пуст [] или типы элементов несогласованы, инструмент использует interface{} как резерв. Вы можете добавить примеры элементов одного типа или вручную изменить тип на конкретные типы срезов вроде []string, []int64 после генерации.
Этот инструмент автоматически выводит соответствующие типы Go на основе типа значения JSON; распространенные сопоставления следующие:
| Пример значения JSON | Сгенерированный тип Go | Примечание |
|---|---|---|
"hello" | string | Прямое сопоставление строк |
true / false | bool | Булево значение |
42 | int64 | Число без десятичной точки |
3.14 | float64 | Число с десятичной точкой |
null | interface{} | Безопасный резерв, когда конкретный тип не может быть выведен |
["a","b"] | []string | Массив строк |
[1,2,3] | []int64 | Массив целых чисел |
[{...},{...}] | []UserItem | Массив объектов, типы элементов генерируются рекурсивно |
{"id":1} | User | Объект генерирует независимую struct |
Инструмент по умолчанию использует int64 и float64; настройте по мере необходимости в реальных проектах:
| Сценарий | Рекомендуемый тип | Причина |
|---|---|---|
| Обычные целочисленные ID, счетчики | int64 | Соответствует значению по умолчанию инструмента, совместимо с большинством чисел JSON |
| Автоинкрементный PK базы данных, известный как положительный | uint64 | Избегает отрицательных чисел, более ясная семантика |
| 32-битные системы или явно малодиапазонные целые числа | int32 | Уменьшает потребление памяти |
| Цены, координаты, научные вычисления | float64 | Соответствует значению по умолчанию инструмента, стандартная точность с плавающей точкой |
| Точные валютные вычисления | decimal.Decimal / int | float64 имеет риск точности; рекомендуем shopspring/decimal или int в единицах центов |
Вся обработка этого инструмента JSON в Go полностью выполняется локально в вашем браузере: парсинг JSON, вывод типов, генерация кода Go выполняются на стороне клиента через Web Worker; введенное содержимое JSON, загруженные файлы и сгенерированный код Go никогда не загружаются ни на какой сервер, не записываются, не кэшируются и не хранятся в облаке. После закрытия или обновления страницы все входные и выходные данные автоматически очищаются из памяти, только localStorage сохраняет вашу последнюю историю ввода (можно очистить в любое время). Подходит для обработки JSON, содержащего API-ключи, токены, чувствительные бизнес-данные.