Метки полей JSON в Go
Метка поля задает имя ключа в тексте,
отличное от имени в Go. Она пишется в
обратных кавычках после типа поля,
ключ json и имя ключа разделяют
двоеточие внутри строки метки.
Без метки в текст попадает только поле с большой буквы, и ключ совпадает с именем поля. Поле с маленькой буквы снаружи пакета не видно, поэтому в текст оно не попадает.
Объявим пользователя с меткой у имени и полем, которое останется только в Go:
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string `json:"name"`
age int
}
func main() {
u := User{Name: "ann", age: 20}
data, err := json.Marshal(u)
if err != nil {
fmt.Println("error")
return
}
fmt.Println(string(data))
}
На экране {"name":"ann"}. Ключ
"name" взят из метки, а поле
age в текст не попало.
Если у экспортируемого поля метки нет, ключ в тексте совпадает с именем поля:
package main
import (
"encoding/json"
"fmt"
)
type Item struct {
Title string
}
func main() {
item := Item{Title: "go"}
data, _ := json.Marshal(item)
fmt.Println(string(data))
}
Дана структура:
type Row struct {
Code int `json:"code"`
note string
}
Скажите, какие ключи появятся в тексте при сборке значения с заполненными полями.
Дана структура:
type Label struct {
Text string `json:"label"`
}
Соберите текст для значения с полем
"hi" и выведите его.
Дана структура:
type Pair struct {
Left int `json:"left"`
Right int
}
Укажите имена ключей для обоих полей без запуска программы.