encoding - skynocover/Wiki-for-GoLang GitHub Wiki

encoding

json

"encoding/json"

type Person struct {
	Id   int    `json:"id"`
	Name string `json:name`
}

func main() {
	data := []byte(`{"id" : 1 , "name" : "Daniel"}`)
	var person Person

	json.Unmarshal(data, &person)//將json轉成struct
	fmt.Println(person)

	jsondata, _ := json.Marshal(person) //將struct轉成json
	fmt.Println(string(jsondata))
}
//{1 Daniel}
//{"id":1,"Name":"Daniel"}

多個json轉型

type Person struct {
	Id   int    `json:"id"`
	Name string `json:name`
}

type Persons struct {
	List []Person
}

//或是宣告 type Persons []Person

func main() {
	data := []byte(`[{"id" : 1 , "name" : "Daniel"},{"id" : 2 , "name" : "Allen"},{"id" : 3 , "name" : "Sam"}]`)
	var persons []Person
	json.Unmarshal(data, &persons)
	fmt.Println(persons)
	jsondata, _ := json.Marshal(persons)
	fmt.Println(string(jsondata))
}
//[{"id":1,"Name":"Daniel"},{"id":2,"Name":"Allen"},{"id":3,"Name":"Sam"}]

使用map接走json

func main() {
	data := []byte(`{"cId" : "A" , "cType" : "English" , "saddr" : { "hsnId" : "C" , "addr" : "中正路12號" } , "persons" : [{"id" : 1 , "name" : "Daniel"},{"id" : 2 , "name" : "Allen"},{"id" : 3 , "name" : "Sam"}]}`)
	var jsonObj map[string]interface{}
	json.Unmarshal([]byte(data), &jsonObj) //將解譯過的資料放至於jsonObj

	classID := jsonObj["cId"].(string)
	fmt.Println(classID)

	studentsAddr := jsonObj["saddr"].(map[string]interface{}) //巢狀map
	hsnID := studentsAddr["hsnId"].(string)
	fmt.Println(hsnID)

	persons := jsonObj["persons"].([]interface{})
	for _, p := range persons {
		person := p.(map[string]interface{})
		id := int(person["id"].(float64))
		name := person["name"].(string)
		fmt.Printf("%d , %v \n", id, name)
	}
}
/*
A
C
1 , Daniel 
2 , Allen 
3 , Sam 
*/