Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpJsDc 182 of 280 menu
◀ ▶

Разбор текста в структуру в Go

Текст кладут в переменную структуры по ее адресу. Команда разбора из пакета encoding/json принимает байты и указатель на значение; без указателя поля останутся пустыми.

Ошибку разбора проверяют так же, как при сборке: при неудаче структуру не считают заполненной. Лишние ключи в тексте обычно игнорируют, а известные поля заполняют по именам ключей или меткам.

Разберем готовый текст в пользователя:

package main import ( "encoding/json" "fmt" ) type User struct { Name string `json:"name"` Age int `json:"age"` } func main() { text := []byte(`{"name":"ann","age":20}`) var u User err := json.Unmarshal(text, &u) if err != nil { fmt.Println("error") return } fmt.Println(u.Name, u.Age) }

На экране "ann" и число 20. Амперсand перед u передает адрес переменной, куда пакет пишет поля.

Разбор можно повторить для карты со строковым ключом:

package main import ( "encoding/json" "fmt" ) func main() { text := []byte(`{"red":1,"blue":2}`) m := make(map[string]int) err := json.Unmarshal(text, &m) if err != nil { fmt.Println("error") return } fmt.Println(m["red"], m["blue"]) }

Дана строка:

text := []byte(`{"x":10,"y":20}`)

Объявите структуру с полями X и Y и метками "x" и "y", разберите text и выведите оба числа.

Дана строка:

text := []byte(`{"title":"go"}`)

Разберите текст в структуру с полем Title и меткой "title", затем выведите поле.

Дан следующий фрагмент:

var u User err := json.Unmarshal(text, u)

Скажите, почему поля после разбора останутся пустыми.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить