序列化與反序列化
package main import ( "encoding/json" "fmt" ) //JSON的序列化 //將結構體構成數據,並轉JSON //將map[string]interface{}構成數據,並轉JSON //使用map切片構成數據,並轉JSON //json.cn //將結構體構成數據,並轉JSON //使用Man 結構體構成數據,並轉為json type Man struct{ Name string Age int Hobby []string Sex bool } func maina1(){ person := Man{"liyi",20,[]string{"唱歌","跳舞"},true} bytes,err := json.Marshal(person) if err != nil{ fmt.Println("序列化失敗,err=",err) return }else{ fmt.Println("序列化成功,err=",err) fmt.Println(string(bytes)) } } //將map[string]interface{}構成數據,並轉JSON //這里interface{}代表任意數據類型 func maina2(){ dataMap := make(map[string]interface{}) dataMap["name"] ="liyi" dataMap["age"] = 20 dataMap["hobby"] = []string{"唱歌","跳舞"} dataMap["sex"] = true bytes,err := json.Marshal(dataMap) if err != nil{ fmt.Println("序列化失敗,err=",err) return }else{ fmt.Println("序列化成功,err=",err) fmt.Println(string(bytes)) } } //使用map切片構成數據,並轉JSON func maina3(){ dataMap1 := make(map[string]interface{}) dataMap1["name"] ="liyi" dataMap1["age"] = 20 dataMap1["hobby"] = []string{"唱歌","跳舞"} dataMap1["sex"] = true dataMap2 := make(map[string]interface{}) dataMap2["name"] ="linging" dataMap1["age"] = 21 dataMap1["hobby"] = []string{"打炮"} dataMap1["sex"] = true dataMap3 := make(map[string]interface{}) dataMap3["name"] ="yiyi" dataMap3["age"] = 18 dataMap3["hobby"] = []string{"學習"} dataMap3["sex"] = true dataSlice := make([]map[string]interface{}, 0) dataSlice = append(dataSlice,dataMap1,dataMap2,dataMap3) bytes,err := json.Marshal(dataSlice) if err != nil{ fmt.Println("序列化失敗,err=",err) return }else{ fmt.Println("序列化成功") fmt.Println(string(bytes)) } } //JSON的反序列化 //將json數據轉為map //將json數據轉為結構體 //將json數據轉換為map切片 //將json數據轉為結構體切片 //將json數據轉為map func maina4(){ //json數據 jsonStr := `{"Name":"liyi","Age":18,"Hobby":["抽煙","喝酒"],"sex":true}` //將json數據轉為字節數據 jsonbytes := []byte(jsonStr) dataMap := make(map[string]interface{}) err := json.Unmarshal(jsonbytes,&dataMap) if err != nil { fmt.Println("反序列化失敗,err=",err) } fmt.Println(dataMap) } //將json數據轉為結構體 func maina5(){ type Man struct{ Name string Age int Hobby []string Sex bool } //json數據 jsonStr := `{"Name":"liyi","Age":18,"Hobby":["抽煙","喝酒"],"sex":true}` //將json數據轉為字節數據 jsonbytes := []byte(jsonStr) //創建一個結構體 Man1 := new(Man) err := json.Unmarshal(jsonbytes,&Man1) if err != nil { fmt.Println("反序列化失敗,err=",err) } fmt.Println(*Man1) } //將json數據轉換為map切片 func maina6(){ jsonStr := `[{"age":21,"hobby":["打炮"],"name":"liyi","sex":true},{"name":"linging"},{"age":18,"hobby":["學習"],"name":"yiyi","sex":true}]` jsonBytes := []byte(jsonStr) dataSlice := make([]map[string]interface{},0) err := json.Unmarshal(jsonBytes,&dataSlice) if err != nil { fmt.Println("反序列化失敗,err=",err) } fmt.Println(dataSlice) } //將json數據轉為結構體切片 func maina7() { type Man struct { Name string Age int Hobby []string Sex bool } jsonStr := `[{"age":21,"hobby":["打炮"],"name":"liyi","sex":true},{"name":"linging"},{"age":18,"hobby":["學習"],"name":"yiyi","sex":true}]` jsonBytes := []byte(jsonStr) Mans := make([]Man, 0) err := json.Unmarshal(jsonBytes, &Mans) if err != nil { fmt.Println("反序列化失敗,err=", err) } fmt.Println(Mans) }
Json編碼與解碼
//編碼:go數據--》json文件 //解碼:json文件--》go數據 //使用json包編碼 //注意:解碼json數據,需要對應的數據類型的數據來接收!!!<br> //將map類型數據編碼為json文件 func mainb0() { //go數據:map類型 dataMap1 := make(map[string]interface{}) dataMap1["name"] = "liyi" dataMap1["age"] = 20 dataMap1["hobby"] = []string{"唱歌", "跳舞"} dataMap1["sex"] = true //打開文件 dstFile, _ := os.OpenFile("C:/test/test1.json", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) defer dstFile.Close() //創建編碼器 encoder := json.NewEncoder(dstFile) //編碼 err := encoder.Encode(dataMap1) if err != nil { fmt.Println("編碼失敗,err=", err) return } fmt.Println("編碼成功") } //將結構體切片編碼轉為json文件 func mainb1(){ type Man struct { Name string Age int Hobby []string Sex bool } person1 := Man{"liyi",20,[]string{"唱歌","跳舞"},true} person2 := Man{"yiyi",20,[]string{"唱歌","跳舞"},true} person3 := Man{"meng",20,[]string{"唱歌","跳舞"},true} people := make([]Man,0) people = append(people,person1,person2,person3) dstFile,_ := os.OpenFile("C:/test/test1.json",os.O_CREATE | os.O_WRONLY | os.O_APPEND,0666) defer dstFile.Close() encoder := json.NewEncoder(dstFile) err := encoder.Encode(people) if err != nil { fmt.Println("編碼失敗,err=", err) return } fmt.Println("編碼成功") } //解碼json文件為map func mainc1(){ //打開json文件 srcFile,_ := os.Open("C:/test/test1.json") defer srcFile.Close() //創建接收數據的map類型數據 datamap := make(map[string]interface{}) //創建解碼器 decoder := json.NewDecoder(srcFile) //解碼 err := decoder.Decode(&datamap) if err != nil{ fmt.Println("解碼失敗,err=",err) return } fmt.Println("解碼成功",datamap) } //解碼json文件為結構體 func mainc2(){ type Man struct { Name string Age int Hobby []string Sex bool } //打開json文件 srcFile,_ := os.Open("C:/test/test1.json") defer srcFile.Close() //創建接收數據的結構體數據 datastruct := make([]Man,0) decoder := json.NewDecoder(srcFile) //解碼 err := decoder.Decode(&datastruct) if err != nil{ fmt.Println("解碼失敗,err=",err) return } fmt.Println("解碼成功",datastruct) }