序列化與反序列化
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)
}
