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

      

  • 相关阅读:
    (转)android头像设置:从本地照片库或拍照获取并剪裁
    获取短信验证码之后按钮背景变化并且出现倒计时
    欢迎界面的下方指示位置圆
    android 关于Toast重复显示解决方法
    判断是不是电话号码
    (转)根据ImageView的大小来压缩Bitmap,避免OOM
    (转)android屏幕适配
    GSON解析JSON
    Linux-命令-cut
    Linux-自疑惑
  • 原文地址:https://www.cnblogs.com/-wenli/p/12333086.html
Copyright © 2020-2023  润新知