美文网首页
22.Go语言·Json使用·序列化·反序列化

22.Go语言·Json使用·序列化·反序列化

作者: 一枼落知天下 | 来源:发表于2019-06-10 18:46 被阅读0次

main.go

// Go语言·Json使用·序列化·反序列化
package main

//  包的本质是创建不同的文件夹
//  go的每一个文件都是属于一个包的
//  go以包的形式管理项目和文件目录。
//  import "包的路径"
import (
    model "day28/model"
)

var content string = `
————————————————Go语言·Json使用·序列化·反序列化————————————————————
在线解析工具:
    https://www.json.cn
一、Json基本介绍
    JavaScript Object Notation
    轻量级的数据交互格式。 
    key-value
    [
        {"name":"Uzi","age":18,"zone":"LPL","ability":["ADC","SUP","Mid"]},
        {"name":"Faker","age":18,"zone":"LCK","ability":["APC","Top"]}
    ]
    任何数据类型都可以转成Json格式:
二、json序列化操作:
    数组
    map
    切片
    结构体
    基本数据类型,可以序列化,但没必要。
    **温馨提示:结构体序列化:
        设置tag标签,设置序列化的key值。

三、反序列化
    1.在反序列化一个json字符串时,要确保反序列化后的数据类型必须跟
    原来序列化之前的数据保持一致。
    2.如果json字符串是通过程序获得的,则不需要对双引号""转义处理

`


func main() {
    model.Entry()
}

model/Utils.go

package model

import (
    "fmt"
    "encoding/json"
)


type Monster struct {
    Name string `json:"name"`
    Age int     `json:"age"`
    Skill string `json:"skill"`
}

/**
 * [Init 入口]
 * @author Jhou Shuai
 * @datetime 2019-05-18T11:58:33+0800
 */
func Entry() {
    testSliceUnMarshal()
}

// 结构体
func testStruct() {
    monter := Monster{
        Name:"小可爱",
        Age:18,
        Skill:"嘤嘤嘤",
    }
    data,err := json.Marshal(&monter)
    if err!=nil{
        fmt.Printf("序列化失败:%v \n", err)
    }
    fmt.Println(string(data))
}

// map
func testMap() {
    var a map[string]interface{}
    a = make(map[string]interface{})
    a["name"] = "小甜点"
    a["age"] = 18
    a["address"] = "玉林"

    data,err := json.Marshal(a)
    if err!=nil{
        fmt.Printf("序列化失败:%v \n", err)
    }
    fmt.Println(string(data))
}

// 切片
func testSlice() {
    var slice []map[string]interface{}

    var a map[string]interface{} = make(map[string]interface{})
    a["name"] = "小甜点"
    a["age"] = 18
    a["address"] = [...]string{"玉林","春熙路"}
    slice = append(slice,a)

    var b map[string]interface{} = make(map[string]interface{})
    b["name"] = "小丁丁"
    b["age"] = 19
    b["address"] = [...]string{"一品天下","武侯祠"}
    slice = append(slice,b)

    data,err := json.Marshal(slice)
    if err!=nil{
        fmt.Printf("序列化失败:%v \n", err)
    }
    fmt.Println(string(data))
}


// 数组
func testArray() {
    var intArr  = [...]int{1,2,3,4,5}
    data,err := json.Marshal(intArr)
    if err!=nil{
        fmt.Printf("序列化失败:%v \n", err)
    }
    fmt.Println(string(data))
}

// 基本数据类型
func testFloat64() {
    var num1 float64 = 100.11
    data,err := json.Marshal(num1)
    if err!=nil{
        fmt.Printf("序列化失败:%v \n", err)
    }
    fmt.Println(string(data))
}


// 结构体反序列化
func testStructUnMarshal() {
    str := "{\"name\":\"小可爱\",\"age\":18,\"skill\":\"嘤嘤嘤\"}"
    var monster Monster
    err := json.Unmarshal([]byte(str),&monster)
    if err!=nil{
        fmt.Printf("反序列化失败:%v \n", err)
    }
    fmt.Println(monster)
}

// 反序列化map,不需要make
// 因为make操作被封装到Unmarshal函数中咯
func testMapUnMarshal() {
    str :="{\"address\":\"玉林\",\"age\":18,\"name\":\"小甜点\"}"
    var a map[string]interface{}
    err := json.Unmarshal([]byte(str),&a)
    if err!=nil{
        fmt.Printf("反序列化失败:%v \n", err)
    }
    fmt.Println(a)
    // map[address:玉林 age:18 name:小甜点]
}

// 反序列化slice
func testSliceUnMarshal() {
    str := "["+
        "{\"address\":[\"玉林\",\"春熙路\"],\"age\":18,\"name\":\"小甜点\"},"+
        "{\"address\":[\"一品天下\",\"武侯祠\"],\"age\":19,\"name\":\"小丁丁\"}"+
    "]"
    var slice []map[string]interface{} //反序列化map,不需要make
    err := json.Unmarshal([]byte(str),&slice)
    if err!=nil{
        fmt.Printf("反序列化失败:%v \n", err)
    }
    fmt.Println(slice)
    // [
    //  map[address:[玉林 春熙路] age:18 name:小甜点]
    //  map[address:[一品天下 武侯祠] age:19 name:小丁丁]
    // ]

}

相关文章

网友评论

      本文标题:22.Go语言·Json使用·序列化·反序列化

      本文链接:https://www.haomeiwen.com/subject/zsetfctx.html