• 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()
    
    }
  • 相关阅读:
    Java运算符号,对象赋值,别名
    斐波那契数列的应用
    递归问题------汉诺塔
    字符串变量小议
    编程题之合并两个有序的数组
    线程/进程的区别之小议(二)
    线程/进程的区别之小议(一)
    OSI 七层模型
    TCP/IP 四层模型
    c语言程序开发过程,编译的完整过程
  • 原文地址:https://www.cnblogs.com/gagaAurora/p/13645104.html
Copyright © 2020-2023  润新知