Ответ
В Go для работы с JSON, как правило, используют два основных подхода:
-
Структуры (
struct
) с тегами полей (рекомендуемый способ)Это идиоматичный и наиболее предпочтительный способ для работы с JSON, структура которого заранее известна. Он обеспечивает типобезопасность и прозрачность кода.
import "encoding/json" type Person struct { Name string `json:"name"` Age int `json:"age,omitempty"` // omitempty - не включать в JSON, если значение нулевое Skills []string `json:"skills"` }
Для кодирования (Go -> JSON) и декодирования (JSON -> Go) используются функции
json.Marshal
иjson.Unmarshal
из стандартной библиотекиencoding/json
. -
Карта
map[string]interface{}
Этот способ используется, когда структура JSON заранее неизвестна, или она очень динамична. Он похож на работу с JSON в скриптовых языках.
var data map[string]interface{} jsonData := []byte(`{"name":"Alice","age":25}`) json.Unmarshal(jsonData, &data) // data["name"] будет равно "Alice"
Недостаток: Теряется типобезопасность. Для доступа к значениям требуются приведения типов (
data["age"].(float64)
), что может привести к панике во время выполнения, если тип окажется другим.