0Pricing
Go Academy · Урок

Теги 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 — локальная установка не требуется.

Все уроки этого курса

  1. Что такое теги структур
  2. Теги JSON
  3. Библиотеки валидации
  4. Разбор пользовательских тегов
← Назад к Go Academy