30

Golang语言之Json序列化

 4 years ago
source link: https://www.tuicool.com/articles/EB77Zr7
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

看结果

Ynyq6vf.png!web

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

请注意

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

将在第一时间作出相关处理.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK