package main import ( "encoding/json" "fmt" ) type AmountType struct { Value string `json:"value"` Name string `json:"name"` } type Data struct { Source string `json:"source"` Target string `json:"target"` Amount AmountType `json:"amount"` } func JsonRemarshal(bytes []byte) ([]byte, error) { var ifce interface{} err := json.Unmarshal(bytes, &ifce) if err != nil { return []byte{}, err } output, err := json.Marshal(ifce) if err != nil { return []byte{}, err } return output, nil } func main() { at := AmountType{Value: "100", Name: "$"} data := Data{Source: "Alice", Target: "Bob", Amount: at} dataBytes, err := json.Marshal(data) if err != nil { fmt.Println(err) } fmt.Println("Original -> ", string(dataBytes)) n, _ := JsonRemarshal(dataBytes) fmt.Println("Sorted Keys -> ", string(n)) }