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

Срез и карта в JSON в Go

Срез при сборке становится массивом в квадратных скобках. Элементы идут в том же порядке, что и в срезе, а тип элементов задает вид каждой ячейки в тексте.

Карта с ключом типа строка становится объектом: каждая пара ключ и значение превращается в поле объекта. Ключи карты другого типа для этого формата не подходят без своего вида.

Запишем теги и счетчики в одной структуре:

package main import ( "encoding/json" "fmt" ) type Data struct { Tags []string `json:"tags"` Meta map[string]int `json:"meta"` } func main() { d := Data{ Tags: []string{"go", "json"}, Meta: map[string]int{"a": 1, "b": 2}, } data, err := json.Marshal(d) if err != nil { fmt.Println("error") return } fmt.Println(string(data)) }

В тексте ключ "tags" ведет к массиву строк, а "meta" к объекту с числовыми значениями. Пустой срез дает [], пустая карта {}.

Разбор заполняет срез и карту по тексту:

package main import ( "encoding/json" "fmt" ) type Data struct { Tags []string `json:"tags"` Meta map[string]int `json:"meta"` } func main() { text := []byte(`{"tags":["x"],"meta":{"k":5}}`) var d Data err := json.Unmarshal(text, &d) if err != nil { fmt.Println("error") return } fmt.Println(len(d.Tags), d.Meta["k"]) }

Дана структура:

type Pack struct { IDs []int `json:"ids"` }

Соберите текст для значения с одним элементом 7 в срезе и выведите его.

Дана строка:

text := []byte(`{"meta":{"x":1}}`)

Разберите текст в структуру Data из урока и выведите значение по ключу "x".

Дана структура:

type Bad struct { ByInt map[int]string `json:"by_int"` }

Скажите, соберется ли текст для заполненной карты без своего вида.

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