• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Go:json(序列化、反序列化)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、示例

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name    string  `json:"name"`
    Age     int     `json:"age"`
    Salary  float64 `json:"salary"`
}

type Student struct {
    Name    string  `json:"name"`
    Age     int     `json:"age"`
    Salary  float64 `json:"salary"`
}

// 对数据进行序列化
func marshalData(data interface{}) []byte{
    data, err := json.Marshal(data)
    if err != nil {
        fmt.Printf("序列化失败:%s\n", err)
    }
    fmt.Printf("序列化结果:%v\n", data)
    fmt.Printf("序列化结果:%s\n", data)
    return data.([]byte)
}

// 对 struct 进行序列化
func marshalStruct() []byte {
    person := Person{
        Name: "佩奇",
        Age: 18,
        Salary: 99.99,
    }
    fmt.Printf("原始的数据:%v\n", person)
    return marshalData(person)
}

// 对 map 进行序列化
func marshalMap() []byte {
    var m map[string]interface{}
    m = make(map[string]interface{})
    m["name"] = "盲僧"
    m["age"] = 10
    m["hobby"] = [2]string{"篮球", "游泳"}
    fmt.Printf("原始的数据:%v\n", m)
    return marshalData(m)
}

// 对 map 切片进行序列化
func marshalSlice() []byte {
    var slice []map[string]interface{}
    m1 := map[string]interface{}{
        "name": "妖姬",
        "age": 20,
    }
    slice = append(slice, m1)
    m2 := map[string]interface{}{
        "name": "德玛",
        "age": 30,
    }
    slice = append(slice, m2)
    fmt.Printf("原始的数据:%v\n", slice)
    return marshalData(slice)
}

// 反序列化成 struct
func unmarshalStruct(data []byte) {
    // 定义一个 Student 实例
    var student Student
    err := json.Unmarshal([]byte(data), &student)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("反序列化结果:", student)
}

// 反序列化成 map
func unmarshalMap(data []byte) {
    // 定义一个 map
    var m map[string]interface{}
    // 注意:反序列化 map,不需要 make,因为 make 操作被封装到了 Unmarsha 函数中
    err := json.Unmarshal([]byte(data), &m)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("反序列化结果:", m)
}

// 反序列化成 slice
func unmarshalSlice(data []byte) {
    // 定义一个 silce
    var slice []map[string]interface{}
    // 注意:反序列化 slice,不需要 make,因为 make 操作被封装到了 Unmarsha 函数中
    err := json.Unmarshal([]byte(data), &slice)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("反序列化结果:", slice)
}

func main() {
    // 序列化
    result1 := marshalStruct()
    fmt.Println()
    result2 := marshalMap()
    fmt.Println()
    result3 := marshalSlice()
    fmt.Println()
    // 反序列化
    unmarshalStruct(result1)
    unmarshalMap(result2)
    unmarshalSlice(result3)
}
View Code

二、注意!!!

在反序列化一个 json 字符串时,要确保反序列化后的数据类型序列化之前的数据类型一致。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
机器人走方格 - ing...go发布时间:2022-07-10
下一篇:
Go语言核心36讲(新年彩蛋)--学习笔记发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap