go json

json 是一种轻量级的数据交换格式

json易于机器解析和生成,并有效的提升网络传输效率,通常程序在网络传输时会先将数据(j结构体,map)等序列化成json字符串,到接收方得到json字符串时,再反序列化恢复成原来的数据类型(结构体,map等  )

json数据在线解析

https://www.json.cn/网站可以验证一个json格式的数据是否正确。尤其是我们编写比较复杂的json格式数据,很有用。

package main

import (
    "encoding/json"
    "fmt"
)


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

func testStruct(){
    //演示
    monster :=Monster{
        Name :"小乔",
        Age  :500,
        Birthday: "2020-11-11",
        Sal: 8000.0,
        Skill:"治愈微笑",
    }


    //将monster序列化
    data,err :=json.Marshal(&monster)
    if err!=nil{
        fmt.Printf("序列号错误,err=%v
",err)
    }

    //输出序列号后的结果
    fmt.Printf("monster序列化后=%v
",string(data))
}

func testMap(){
    //定义一个map
    var a map[string]interface{}
    //使用map,需要make
    a=make(map[string]interface{})
    a["name"]="华晨宇"
    a["age"]=18
    a["address"]="湖北十堰"

    //将a这个map进行序列化
    //将monster序列化
    data,err:=json.Marshal(a)
    if err!=nil{
        fmt.Printf("序列化错误 err=%v
",err)

    }
    //输出序列化后的结果
    fmt.Printf("a map 序列化后=%v
",string(data))

}

func testSlice(){
    var slice []map[string]interface{}
    var ml map[string]interface{}
    //使用map前,需要先make
    ml=make(map[string]interface{})
    ml["name"]="jack"
    ml["age"]="7"
    ml["address"]="北京"
    slice=append(slice,ml)

    var m2 map[string]interface{}
    //使用map前,需要先make
    m2=make(map[string]interface{})
    m2["name"]="tom"
    m2["age"]="20"
    m2["address"]=[2]string{"黑龙江","杭州"}
    slice=append(slice,m2)

    //对切片进行操作
    data,err :=json.Marshal(slice)
    if err!=nil{
        fmt.Printf("序列化错误 err=%v
",err)
    }

    //输出序列化后的结果
    fmt.Printf("slice 序列化后=%v
",string(data))
}

//对基本数据类型序列化,对基本数据类型进行序列化意义不大
func testFloat64(){
    var numl float64 = 2345.66

    //对numl进行序列化
    data,err :=json.Marshal(numl)
    if err!=nil{
        fmt.Printf("序列化错误 err=%v
",err)
    }

    //输出序列化后的结果
    fmt.Printf("slice 序列化后=%v
",string(data))
}

func unmarshalStruct(){
    str :="{"Name":"牛魔王","Age":500,"Birthday":"2020-11-11","Sal":8000,"Skill":"牛魔王"}"


    //定义一个Monster实例
    var monster Monster
    err :=json.Unmarshal([]byte(str),&monster)
    if err!=nil{
        fmt.Printf("unmarshal err=%v
",err)

    }
    fmt.Printf("反序列化后monster=%v monster.Name=%v
",monster,monster.Name)
}

func main(){
    //演示将结构体,map,切片进行序列化
    testStruct()
    testMap()
    testSlice()//对切片序列化
    testFloat64()//对基本数据类型序列化
    unmarshalStruct()

}
原文地址:https://www.cnblogs.com/gagaAurora/p/13645104.html