- 目錄 -
JSON序列化
尚硅谷Golang課

JSON序列化

JSON 格式 {“鍵”:“值”} {“鍵”:“值”,“鍵2”:“值2”} {“鍵”:“值”,“鍵2”:[“值2數組”,值2數組]}

type Monster struct {
	Name string  `json:"name"` //反射機制
	Age  int     `json:"age"`
	Sal  float64 `json:"sal"`
}

func test1() {
	monster1 := Monster{
		Name: "牛魔王",
		Age:  50,
		Sal:  8000.0,
	}
	data, err := json.Marshal(&monster1)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(string(data))
}

//把map序列化
func testMap() {
	var mapA map[string]interface{} = make(map[string]interface{})
	mapA["name"] = "紅孩兒"
	mapA["age"] = 18
	data, err := json.Marshal(&mapA)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(string(data))

}

//切片序列化
func testSlice() {
	var slice1 []map[string]interface{}
	var m1 map[string]interface{} = make(map[string]interface{})
	m1["name"] = "珍娜"
	m1["age"] = 40
	slice1 = append(slice1, m1)
	var m2 map[string]interface{} = make(map[string]interface{})
	m2["name"] = "索爾"
	m2["age"] = 25
	slice1 = append(slice1, m2)
	data, err := json.Marshal(slice1)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(string(data))

}

//基本數據類型序列化,沒啥意義 因為他沒有key 就只會轉出一個string
func testFloat64() {
	var num1 float64 = 123.45
	data, err := json.Marshal(num1)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(string(data))

}

//反序列化
func unmarshal() {
	str := `{"name":"牛魔王","age":50,"sal":8000}`
	//用`...`包起來保留原格式

	//定義一個實例來接收 這個接收的格式一定要能符合對應
	var heroes Monster
	err := json.Unmarshal([]byte(str), &heroes)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(heroes)
}
func unmarshalMap() {
	str := `{"age":18,"name":"紅孩兒"}`
	var a map[string]interface{}
	//不用make因為unmarshal函數內封裝了
	err := json.Unmarshal([]byte(str), &a)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(a)
}

func main() {
	test1()
	testMap()
	testSlice()
	testFloat64()
	unmarshal()
	unmarshalMap()
}

上次修改於 2021-08-01

此篇文章的評論功能已經停用。