JSON
Получить JSON объект из словаря
Создаём словарь и добавляем в него элементы.
dict := make(map [string] int)
dict["x"] = 12
dict["y"] = 15
dict["z"] = 0
Получаем JSON объект.
q, _ := json.Marshal(dict)
s := string(q)
fmt.Println(s)
Получить JSON объект из структуры
Описываем структуру.
Названия полей следует начинать с большой буквы.
type Dot struct {
A float64
B float64
}
Создаём экземпляр структуры и инициализируем значения.
var d Dot
d.A = 31.5
d.B = 17.1
Получаем JSON объект.
q, _ := json.Marshal(d)
s := string(q)
fmt.Println(s)
Получить JSON объект из сложной структуры
Опишем структуру для хранения информации о школе.
type SchoolStructure struct {
Number int
Description string
}
Опишем структуру для хранения информации о человеке.
type ManStructure struct {
Surname string
Age int
School SchoolStructure
}
Создаём экземпляр структуры "Человек".
Инициализируем поля созданной структуры.
var man ManStructure
man.Surname = "Иванов"
man.Age = 14
man.School.Number = 218
man.School.Description = "Математическая школа"
Получаем JSON объект.
q, _ := json.Marshal(man)
s := string(q)
fmt.Println(s)
Получить JSON массив
Опишем структуру.
type Student struct {
Surname string
Age int
}
Создадим функцию для инициализации полей структуры.
func initStudent(s string, n int, student * Student) {
student.Surname = s
student.Age = n
}
Создаём массив структур и инициализируем элементы массива.
var arr[5] Student;
initStudent("Иванов", 10, &arr[0])
initStudent("Петров", 20, &arr[1])
initStudent("Сидоров", 30, &arr[2])
initStudent("Орлов", 40, &arr[3])
initStudent("Земцов", 50, &arr[4])
Получаем JSON массив.
q, _ := json.Marshal(arr)
s := string(q)
fmt.Println(s)
Получить объект из строки формата JSON
Необходимо распарсить JSON строку:
{"Surname":"Иванов","Age":14,"School":{"Number":218,"Description":"Математическая школа"}}
Создаём вспомогательную функцию.
func getObj(info string) (map[string]interface{}, error) {
b := []byte(info)
var dat map[string]interface{}
if err := json.Unmarshal(b, &dat); err != nil {
return dat, errors.New("json parsing error")
}
return dat, nil
}
Реализация распарсивания.
func main() {
var content string
content = `{"Surname":"Иванов","Age":14,"School":{"Number":218,"Description":"Математическая школа"}}`
var m map[string]interface{}
m, e := getObj(content)
if e == nil {
var surname string
var age int
surname = m["Surname"].(string)
age = int(m["Age"].(float64))
fmt.Println("Фамилия:", surname)
fmt.Println("Возраст:", age)
m2 := m["School"].(map[string]interface{})
var number int
var description string
number = int(m2["Number"].(float64))
description = m2["Description"].(string)
fmt.Println("Номер школы:", number)
fmt.Println("Описание школы:", description)
} else {
fmt.Println(e)
}
}
Получить массив из строки формата JSON
Необходимо распарсить JSON строку:
[{"a":"Maxim", "b":12},{"a":"Nina", "b":17},{"a":"Alex", "b":15}]
Создаём вспомогательную функцию.
func getArr(info string) ([]interface{}, error) {
b := []byte(info)
var dat []interface{}
if err := json.Unmarshal(b, &dat); err != nil {
return dat, errors.New("json parsing error")
}
return dat, nil
}
Реализация распарсивания.
func main() {
var content string
content = `[{"a":"Maxim", "b":12},{"a":"Nina", "b":17},{"a":"Alex", "b":15}]`
var m []interface{}
m, e := getArr(content)
if e == nil {
for i := 0; i < len(m); i++ {
m2 := m[i].(map[string]interface{})
var a string
var b int
a = m2["a"].(string)
b = int(m2["b"].(float64))
fmt.Println(a, b)
}
} else {
fmt.Println(e)
}
}
Last updated
Was this helpful?