package main
import (
"encoding/json"
"fmt"
)
type Event struct {
Type string `json:"type"`
Timestamp int64 `json:"ts"`
Data map[string]any `json:"data"`
}
func main() {
// Marshal — struct to JSON
e := Event{Type: "signup", Timestamp: 1735689600,
Data: map[string]any{"user_id": 42, "plan": "pro"}}
b, _ := json.Marshal(e)
fmt.Println(string(b))
// {"type":"signup","ts":1735689600,"data":{"plan":"pro","user_id":42}}
pretty, _ := json.MarshalIndent(e, "", " ")
fmt.Println(string(pretty))
// Unmarshal — JSON to struct
raw := []byte(`{"type":"login","ts":1735689700,"data":{"user_id":42}}`)
var parsed Event
if err := json.Unmarshal(raw, &parsed); err != nil {
fmt.Println("err:", err)
}
fmt.Printf("%+v\n", parsed)
// Untyped — decode into map[string]any
var dynamic map[string]any
json.Unmarshal(raw, &dynamic)
fmt.Println(dynamic["type"]) // login
}
Create a free account and build your private vault. Share publicly whenever you want.