go encoding/json庫詳解


 

 

序列化與反序列化 

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)
 
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM