json.Marshal — Go-структура → JSON-байты. json.Unmarshal — JSON → структура.
type User struct {
Name string json:"name"
Email string json:"email,omitempty" // пропустить если пусто
Age int json:"age"
pass string // не экспортировано — игнорируется
}
u := User{Name: "John", Age: 30}
data, _ := json.Marshal(u)
// {"name":"John","age":30} — email пропущен (omitempty)
var u2 User
json.Unmarshal(data, &u2) // передаём указатель!
Полезные теги:
json:"-"— полностью игнорироватьjson:"name,string"— число как JSON-строка
json.NewEncoder(w) / json.NewDecoder(r) вместо Marshal/Unmarshal — не буферизует всё в памяти.