zhiruchen
6/23/2017 - 4:33 AM

golang construct combine struct json

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
*/