Go
  • Введение
  • Основы
  • Массивы
  • Считывание данных
  • Словари
  • Функции
  • Структуры и методы
  • Ошибки
  • JSON
  • Динамические массивы
  • Сортировка записей
Powered by GitBook
On this page
  • Получить JSON объект из словаря
  • Получить JSON объект из структуры
  • Получить JSON объект из сложной структуры
  • Получить JSON массив
  • Получить объект из строки формата JSON
  • Получить массив из строки формата JSON

Was this helpful?

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)
    }
}
PreviousОшибкиNextДинамические массивы

Last updated 5 years ago

Was this helpful?