Golang语言之Json序列化

aside section._1OhGeD · · 4237 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Json序列化 指,将具有key-value(键 -> 值)结构的数据类型,例如:go语言中的map, slice,struct...序列化成json格式的字符串的操作。json是一种主流的数据传输格式,灵活轻便...

需要导入一个包 "encoding/json"

上代码

Golang - struct 结构体序列化代码段

//定义一个简单的结构体 Monster
type Monster struct {
    Name     string
    Age      int
    Birthday string
    Sal      float64
    Skill    string
}

//写一个 testStruct()结构体的序列化方法
func testStruct() {
    monster := Monster{
        Name:     "牛魔王",
        Age:      500,
        Birthday: "2019-10-27",
        Sal:      10000.01,
        Skill:    "牛魔拳",
    }

    // 将Monster结构体序列化
    data, err := json.Marshal(&monster)
    if err != nil {
        fmt.Printf("序列化错误 err is %v", err)
    }
    //输出序列化结果
    fmt.Printf("monster序列化后 = %v", string(data))
}

Golang - map序列化代码段

// map序列化
func testMap() {
    //定义一个map
    var a map[string]interface{}
    //使用map之前 必须make一下
    a = make(map[string]interface{})
    a["name"] = "红孩儿"
    a["age"] = 18
    a["address"] = "重庆洪崖洞"

    // 将a map结构体序列化
    data, err := json.Marshal(a)
    if err != nil {
        fmt.Printf("序列化错误 err is %v", err)
    }
    //输出序列化结果
    fmt.Printf("map序列化后 = %v", string(data))
}

Golang - slice序列化代码段

// slice进行序列化
func testSlice() {
    var slice []map[string]interface{} // 定义了一个切片,里面是map格式 map[string]interface{}
    var m1 map[string]interface{}      //定义切片中的第一个map M1
    m1 = make(map[string]interface{})
    m1["name"] = "Matt"
    m1["age"] = 36
    m1["address"] = [2]string{"重庆沙坪坝", "上海"}
    slice = append(slice, m1)

    var m2 map[string]interface{} //定义切片中的第2个map M2
    m2 = make(map[string]interface{})
    m2["name"] = "damon"
    m2["age"] = 36
    m2["address"] = "沙坪坝"
    slice = append(slice, m2)

    // 将slice进行序列化
    data, err := json.Marshal(slice)
    if err != nil {
        fmt.Printf("序列化错误 err is %v", err)
    }
    //输出序列化结果
    fmt.Printf("slice序列化后 = %v", string(data))
}

完整代码供参考

package main

import (
    "encoding/json"
    "fmt"
)

// Json序列化指,将具有key-value(键 -> 值)结构的数据类型,例如:go语言中的map, slice,struct...序列化成json格式的字符串的操作

//定义一个简单的结构体 Monster
type Monster struct {
    Name     string
    Age      int
    Birthday string
    Sal      float64
    Skill    string
}

//写一个 testStruct()结构体的序列化方法
func testStruct() {
    monster := Monster{
        Name:     "牛魔王",
        Age:      500,
        Birthday: "2019-10-27",
        Sal:      10000.01,
        Skill:    "牛魔拳",
    }

    // 将Monster结构体序列化
    data, err := json.Marshal(&monster)
    if err != nil {
        fmt.Printf("序列化错误 err is %v", err)
    }
    //输出序列化结果
    fmt.Printf("monster序列化后 = %v", string(data))
}

// map序列化
func testMap() {
    //定义一个map
    var a map[string]interface{}
    //使用map之前 必须make一下
    a = make(map[string]interface{})
    a["name"] = "红孩儿"
    a["age"] = 18
    a["address"] = "重庆洪崖洞"

    // 将a map结构体序列化
    data, err := json.Marshal(a)
    if err != nil {
        fmt.Printf("序列化错误 err is %v", err)
    }
    //输出序列化结果
    fmt.Printf("map序列化后 = %v", string(data))
}

// slice进行序列化
func testSlice() {
    var slice []map[string]interface{} // 定义了一个切片,里面是map格式 map[string]interface{}
    var m1 map[string]interface{}      //定义切片中的第一个map M1
    m1 = make(map[string]interface{})
    m1["name"] = "Matt"
    m1["age"] = 36
    m1["address"] = [2]string{"重庆沙坪坝", "上海"}
    slice = append(slice, m1)

    var m2 map[string]interface{} //定义切片中的第2个map M2
    m2 = make(map[string]interface{})
    m2["name"] = "damon"
    m2["age"] = 36
    m2["address"] = "沙坪坝"
    slice = append(slice, m2)

    // 将slice进行序列化
    data, err := json.Marshal(slice)
    if err != nil {
        fmt.Printf("序列化错误 err is %v", err)
    }
    //输出序列化结果
    fmt.Printf("slice序列化后 = %v", string(data))
}

func main() {
    //结构体, map, slice进行序列化
    testStruct()
    testMap()
    testSlice()
}

看结果

struct, map, slice 的json序列化结果

请注意

本文部分内容,图片,及视频源于网络转载, 不以盈利为目的,不构成商业目的使用, 仅用于学习交流...相关版权归原作者所有。如有异议,请联系我 751749090@qq.com [麦特matt]
将在第一时间作出相关处理.


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:aside section._1OhGeD

查看原文:Golang语言之Json序列化

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4237 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传