zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Go语言之JSON序列化(二十三)

Go语言JSONJSON 序列化 二十三
2023-06-13 09:12:23 时间

Go语言之JSON序列化


  • 序列化(func Marshal(v interface{})([]byte, error) )
    • 结构体序列化
    • Map序列化
    • Tag (加了Tag,结构体就会映射你序列化以及反序列化的key)

json_demo.go文件

    package json_demo
    
    import (
        "encoding/json"
        "fmt"
    )
    
    type Serve struct {
        ServeName string `json:"name"`         //`json:"serve_name"`  加Tag
        ServeIp   string `json:"ip"`
        ServePort int    `json:"port"`
    }
    //结构体转化为json
    func SerializeStruct() {
        serve := new(Serve) //创建
        serve.ServeName = "json-demo-struct"
        serve.ServeIp = "127.0.0.1"
        serve.ServePort = 8080
    
        b,err := json.Marshal(serve)  //序列化成json字节数组
        if err != nil {
            fmt.Println("Marshal err:", err.Error())
            return
        }
        //将json字节数组转化为string
        fmt.Println("Marshal json:",string(b))
        //结果:Marshal json: {"ServeName":"json-demo","ServeIp":"127.0.0.1","ServePort":8080}
        //加Tag:Marshal json: {"name":"json-demo-struct","ip":"127.0.0.1","port":8080}
    }
    func SerializeMap()  {
        serve := make(map[string]interface{}) //创建
        serve["ServeName"] = "json-demo-map"
        serve["ServeIp"] = "198.0.0.1"
        serve["ServePort"] = 8090
    
        b,err := json.Marshal(serve)  //序列化成json字节数组
        if err != nil {
            fmt.Println("Marshal err:", err.Error())
            return
        }
        //将json字节数组转化为string
        fmt.Println("Marshal json:",string(b))
        //结果:Marshal json: {"ServeIp":"198.0.0.1","ServeName":"json-demo-map","ServePort":8090}
    }

main.go文件

    package main
    
    import "./json_demo"
    func main() {
        json_demo.SerializeStruct()
        json_demo.SerializeMap()
    }

反序列化(func Unmarshal(data []byte, v interface{}) error)

  • 反序列化为结构体
  • 反序列化为Map json_demo.go文件
package json_demo

import (
    "encoding/json"
    "fmt"
)

type Serve struct {
    ServeName string `json:"name"`         //`json:"serve_name"`  加Tag
    ServeIp   string `json:"ip"`
    ServePort int    `json:"port"`
}
//json转化为结构体
func DeSerializeStruct() {
    jsonString := `{"ip":"198.0.0.1","name":"json-demo-map","port":8090}`
    serve := new(Serve)
    err := json.Unmarshal([]byte(jsonString),&serve)
    if err != nil{
        fmt.Println("Unmarshal err:", err.Error())
        return
    }
    fmt.Println("Unmarshal struct:", serve) //Unmarshal struct: &{json-demo-map 198.0.0.1 8090}
}
//json转化为map
func DeSerializeMap() {
    jsonString := `{"ServeIp":"198.0.0.1","ServeName":"json-demo-map","ServePort":8090}`
    serve := make(map[string]interface{})
    err := json.Unmarshal([]byte(jsonString),&serve)
    if err != nil{
        fmt.Println("Unmarshal err:", err.Error())
        return
    }
    fmt.Println("Unmarshal map:", serve) //Unmarshal map: map[ServeIp:198.0.0.1 ServeName:json-demo-map ServePort:8090]
}

main.go文件

    package main
    
    import "./json_demo"
    func main() {
        json_demo.DeSerializeStruct()
        json_demo.DeSerializeMap()
    }