首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Go语言之JSON序列化(二十三)

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

作者头像
友儿
发布2022-09-11 14:09:47
发布2022-09-11 14:09:47
4260
举报
文章被收录于专栏:友儿友儿

Go语言之JSON序列化


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

json_demo.go文件

代码语言:javascript
复制
    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文件

代码语言:javascript
复制
    package main
    
    import "./json_demo"
    func main() {
        json_demo.SerializeStruct()
        json_demo.SerializeMap()
    }

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

  • 反序列化为结构体
  • 反序列化为Map json_demo.go文件
代码语言:javascript
复制
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文件

代码语言:javascript
复制
    package main
    
    import "./json_demo"
    func main() {
        json_demo.DeSerializeStruct()
        json_demo.DeSerializeMap()
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档