golang construct combine struct json
package main
import (
"fmt"
"encoding/json"
)
type X struct {
A string
B string
}
type Y struct {
C string
D string
}
type Z struct {
D X
E Y
}
func main() {
b1, err := json.Marshal(&X{A: "haha", B: "gege"})
fmt.Println(string(b1), err)
b2, err := json.Marshal(&Y{C: "haha", D: "gege"})
fmt.Println(string(b2), err)
final := `{"D": %s, "E": %s}`
zs := fmt.Sprintf(final, string(b1), string(b2))
fmt.Println(zs)
var z *Z
err = json.Unmarshal([]byte(zs), &z)
fmt.Printf("z=: %v\n", z)
fmt.Printf("D=: %v\n", z.D)
fmt.Printf("E=: %v\n", z.E)
zx := Z{
D: X{
A: "123",
B: "456",
},
E: Y{
C: "1234",
D: "5678",
},
}
fmt.Printf("%v\n", zx.D)
fmt.Printf("%v\n", zx.E)
b3, err3 := json.Marshal(&zx)
fmt.Println(string(b3), err3)
fmt.Println("Hello, playground")
}
/*
{"A":"haha","B":"gege"} <nil>
{"C":"haha","D":"gege"} <nil>
{"D": {"A":"haha","B":"gege"}, "E": {"C":"haha","D":"gege"}}
z=: &{{haha gege} {haha gege}}
D=: {haha gege}
E=: {haha gege}
{123 456}
{1234 5678}
{"D":{"A":"123","B":"456"},"E":{"C":"1234","D":"5678"}} <nil>
Hello, playground
*/