Теги JSON
Управляйте маршалингом
«Теги JSON» — бесплатный урок Go Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Теги JSON управляют сериализацией
Пакет encoding/json использует теги JSON, чтобы определять имена ключей и правила преобразования структур в JSON и обратно.
Имена полей по умолчанию
Без тегов ключи JSON в точности совпадают с именами экспортируемых полей, включая регистр букв.
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string
Age int
}
func main() {
b, _ := json.Marshal(User{"Ann", 30})
fmt.Println(string(b))
}Переименование ключей
Тег JSON изменяет имя ключа в выводе. Здесь Name превращается в имя в нижнем регистре.
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
Age int "json:\"age\""
}
func main() {
b, _ := json.Marshal(User{"Ann", 30})
fmt.Println(string(b))
}Параметр omitempty
Добавьте ,omitempty, чтобы пропустить поле в выводе, когда оно содержит нулевое значение (пустую строку, 0, nil и т. д.).
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
Email string "json:\"email,omitempty\""
}
func main() {
b, _ := json.Marshal(User{Name: "Ann"})
fmt.Println(string(b))
}Игнорирование поля
Тег - сообщает кодировщику, что поле нужно полностью пропустить; это полезно для таких секретов, как пароли.
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
Password string "json:\"-\""
}
func main() {
b, _ := json.Marshal(User{"Ann", "secret"})
fmt.Println(string(b))
}Десериализация с тегами
Теги работают в обоих направлениях. При декодировании JSON тег сообщает декодировщику, какой ключ JSON заполняет какое поле.
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
}
func main() {
var u User
json.Unmarshal([]byte("{\"name\":\"Bob\"}"), &u)
fmt.Println(u.Name)
}Сопоставление без учёта регистра
При десериализации Go в качестве запасного варианта сопоставляет ключи JSON с тегами без учёта регистра. Тем не менее явно заданные теги — безопасный и понятный выбор.
Строковый вариант
Параметр ,string кодирует числовое или логическое поле как строку JSON. Это полезно для систем, которые ожидают числа в кавычках.
package main
import (
"encoding/json"
"fmt"
)
type Item struct {
ID int "json:\"id,string\""
}
func main() {
b, _ := json.Marshal(Item{ID: 42})
fmt.Println(string(b))
}Объединение параметров
Можно объединить имя с параметрами: json:"email,omitempty". Сначала указывается имя, затем параметры, разделённые запятыми.
Неэкспортируемые поля пропускаются
Сериализуются только экспортируемые поля (с заглавной буквы). Поле в нижнем регистре невидимо для encoding/json независимо от имеющегося у него тега.
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
age int
}
func main() {
b, _ := json.Marshal(User{Name: "Ann", age: 30})
fmt.Println(string(b))
}Форматированный вывод
json.MarshalIndent форматирует JSON с отступами, что удобно для читаемых журналов и при этом сохраняет действие тегов.
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
}
func main() {
b, _ := json.MarshalIndent(User{"Ann"}, "", " ")
fmt.Println(string(b))
}Быстрая проверка
Что делает параметр ,omitempty в теге json?
Итоги
Теги JSON управляют сериализацией:
- Переименовывайте ключи с помощью
json:"name" ,omitemptyпропускает нулевые значения-игнорирует поле;,stringзаключает числа в кавычки- Кодируются только экспортируемые поля
Часто задаваемые вопросы
Урок «Теги JSON» бесплатный?
Да — полный текст урока «Теги JSON» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Теги JSON»?
Управляйте маршалингом Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Теги JSON»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.