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

Функция json.Unmarshal

Функция json.Unmarshal преобразует JSON-данные в значения Go. Она принимает два параметра: слайс байтов с JSON-данными и указатель на переменную, в которую нужно сохранить результат. Функция возвращает ошибку, если декодирование не удалось. Для корректного преобразования целевая структура должна иметь соответствующие поля с тегами json.

Синтаксис

json.Unmarshal(data, &v)

Пример

Давайте декодируем простой JSON-объект в структуру:

package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { jsonData := []byte(`{"name":"John","age":30}`) var person Person err := json.Unmarshal(jsonData, &person) if err != nil { fmt.Println("Error:", err) return } fmt.Println(person) }

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

{John 30}

Пример

Давайте декодируем JSON-массив в слайс структур:

package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { jsonData := []byte(`[{"name":"John","age":30},{"name":"Jane","age":25}]`) var people []Person err := json.Unmarshal(jsonData, &people) if err != nil { fmt.Println("Error:", err) return } fmt.Println(people) }

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

[{John 30} {Jane 25}]

Пример

Давайте декодируем JSON с вложенными объектами:

package main import ( "encoding/json" "fmt" ) type Address struct { City string `json:"city"` Zip string `json:"zip"` } type Person struct { Name string `json:"name"` Age int `json:"age"` Address Address `json:"address"` } func main() { jsonData := []byte(`{"name":"John","age":30,"address":{"city":"New York","zip":"10001"}}`) var person Person err := json.Unmarshal(jsonData, &person) if err != nil { fmt.Println("Error:", err) return } fmt.Println(person) }

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

{John 30 {New York 10001}}

Пример

Давайте декодируем JSON в map с динамическими ключами:

package main import ( "encoding/json" "fmt" ) func main() { jsonData := []byte(`{"name":"John","age":30,"city":"New York"}`) var result map[string]interface{} err := json.Unmarshal(jsonData, &result) if err != nil { fmt.Println("Error:", err) return } fmt.Println(result) }

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

map[age:30 city:New York name:John]

Пример

Давайте обработаем ошибку при декодировании некорректного JSON:

package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { jsonData := []byte(`{"name":"John","age":"thirty"}`) var person Person err := json.Unmarshal(jsonData, &person) if err != nil { fmt.Println("Error:", err) return } fmt.Println(person) }

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

"Error: json: cannot unmarshal string into Go struct field Person.age of type int"

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

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