Ответ
JSON (JavaScript Object Notation) — это легковесный, текстовый формат обмена данными, основанный на синтаксисе JavaScript. Благодаря своей простоте и удобочитаемости он стал стандартом де-факто для коммуникации между веб-сервисами (API).
Основные типы данных в JSON:
- Объект: Неупорядоченный набор пар
ключ:значение
в фигурных скобках{}
. - Массив: Упорядоченный список значений в квадратных скобках
[]
. - Строка: Текст в двойных кавычках
"..."
. - Число: Целое или с плавающей точкой.
- Логическое значение:
true
илиfalse
. null
: Обозначает отсутствие значения.
В Go для работы с JSON предназначен стандартный пакет encoding/json
.
Основные операции:
- Сериализация (Marshalling): Преобразование структуры Go в JSON-строку.
- Десериализация (Unmarshalling): Преобразование JSON-строки в структуру Go.
Пример работы в Go:
package main
import (
"encoding/json"
"fmt"
)
// Используем теги для указания имен полей в JSON
type User struct {
Name string `json:"name"`
Age int `json:"age"`
IsActive bool `json:"isActive"`
Courses []string `json:"courses,omitempty"` // omitempty - не включать поле, если оно пустое
}
func main() {
// 1. Сериализация (Go -> JSON)
user := User{Name: "Alice", Age: 30, IsActive: true}
jsonData, err := json.Marshal(user)
if err != nil {
fmt.Println("Ошибка сериализации:", err)
return
}
fmt.Println("JSON:", string(jsonData)) // {"name":"Alice","age":30,"isActive":true}
// 2. Десериализация (JSON -> Go)
var newUser User
err = json.Unmarshal(jsonData, &newUser)
if err != nil {
fmt.Println("Ошибка десериализации:", err)
return
}
fmt.Printf("Go struct: %+vn", newUser) // Go struct: {Name:Alice Age:30 IsActive:true Courses:[]}
}