РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1141 of 1593 menu

Теги json

Теги json в Go используются для настройки сериализации и десериализации структур в JSON и обратно. Они позволяют изменять имена полей, управлять пропуском пустых значений и обрабатывать специальные случаи. Теги указываются в виде строки после типа поля в структуре.

Синтаксис

FieldType `json:"имя,опции"`

В теге можно указать имя поля в JSON и дополнительные опции через запятую. Доступные опции: omitempty - пропускать поле, если оно имеет нулевое значение, string - преобразовывать значение в строку, - - исключить поле из сериализации.

Пример

Давайте создадим структуру с различными тегами и сериализуем её в JSON:

package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"fullName"` Age int `json:"age,omitempty"` Email string `json:"email"` Password string `json:"-"` Active bool `json:"active,string"` } func main() { p := Person{ Name: "John Doe", Age: 30, Email: "john@example.com", Password: "secret123", Active: true, } res, _ := json.Marshal(p) fmt.Println(string(res)) }

Результат выполнения кода:

{"fullName":"John Doe","age":30,"email":"john@example.com","active":"true"}

В результате поле Password было исключено, поле Age получило имя age, поле Active преобразовано в строку, а поле Name стало fullName.

Пример

Рассмотрим использование опции omitempty для пропуска полей с нулевыми значениями:

package main import ( "encoding/json" "fmt" ) type User struct { ID int `json:"id"` Username string `json:"username"` Age int `json:"age,omitempty"` City string `json:"city,omitempty"` } func main() { u := User{ ID: 1, Username: "alice", } res, _ := json.Marshal(u) fmt.Println(string(res)) }

Результат выполнения кода:

{"id":1,"username":"alice"}

Поля Age и City были пропущены, так как они имеют нулевые значения (0 и пустая строка).

Пример

Продемонстрируем использование опции string для числовых полей:

package main import ( "encoding/json" "fmt" ) type Product struct { ID int `json:"id"` Name string `json:"name"` Price int `json:"price,string"` } func main() { p := Product{ ID: 101, Name: "Laptop", Price: 99999, } res, _ := json.Marshal(p) fmt.Println(string(res)) }

Результат выполнения кода:

{"id":101,"name":"Laptop","price":"99999"}

Число 99999 было преобразовано в строку "99999" в JSON.

Пример

Покажем десериализацию JSON в структуру с использованием тегов:

package main import ( "encoding/json" "fmt" ) type Employee struct { FirstName string `json:"first_name"` LastName string `json:"last_name"` Salary int `json:"salary,omitempty"` } func main() { jsonData := []byte(`{"first_name":"Bob","last_name":"Smith","salary":50000}`) var e Employee json.Unmarshal(jsonData, &e) fmt.Printf("%+v\n", e) }

Результат выполнения кода:

{FirstName:Bob LastName:Smith Salary:50000}

Смотрите также

  • функцию json.Marshal,
    которая сериализует структуру в JSON
  • функцию json.Unmarshal,
    которая десериализует JSON в структуру
  • функцию json.MarshalIndent,
    которая форматирует вывод JSON с отступами
  • функцию json.Valid,
    которая проверяет валидность JSON
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить