Вот так уже лучше, но в мапах приходится хранить анонимные типы (скорее всего в слайсах будет также)
https://play.golang.org/p/e1w5-RVRE0w
package main
import (
"encoding/json"
"fmt"
)
// Canonical types
type Aaa struct {
Field1 string
Field2 int
Field3 map[int]*struct {
Field4 int
Field5 string
}
}
func main() {
// Data
a := &Aaa{"string", -1, map[int]*struct {
Field4 int
Field5 string
}{}}
a.Field3[100] = &struct {
Field4 int
Field5 string
}{100, "text"}
a.Field3[200] = &struct {
Field4 int
Field5 string
}{200, "text22222"}
// Regular json marshal
b1, _ := json.MarshalIndent(a, "", " ")
fmt.Printf("%s\n", string(b1))
// Alternative types
b2, _ := json.MarshalIndent(*(*struct {
Field1 string `json:"Typ"`
Field2 int `json:"Prio,string"`
Field3 map[int]*struct {
Field4 int `json:"-"`
Field5 string `json:"Text"`
} `json:"Map"`
})(a), "", " ")
fmt.Printf("%s\n", string(b2))
}