zoukankan      html  css  js  c++  java
  • 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()
    
    }
  • 相关阅读:
    转:jQuery选择器大全(48个代码片段+21幅图演示)
    转:Web 开发中很实用的10个效果【附源码下载】
    转:在网站开发中很有用的8个 jQuery 效果【附源码】
    转:35个让人惊讶的 CSS3 动画效果演示
    转:总结const、readonly、static三者的区别
    转:C# 深入理解堆栈、堆在内存中的实现
    推荐:Asp.Net MVC 多语言(html+js共用一套资源文件)
    转:HttpModule与HttpHandler详解
    转: ASP.NET MVC 多语言配置
    spring集合类型注入
  • 原文地址:https://www.cnblogs.com/gagaAurora/p/13645104.html
Copyright © 2011-2022 走看看