zoukankan      html  css  js  c++  java
  • (三十八)golang--json(对切片、map、结构体进行序列化)

    JSON(javascript object notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。key-val

    JSON是在2001年开始推广的数据格式,目前已成为主流的数据格式。

    JSON易于机器解析和生成,并有效地提升网络传输效率。通常程序在网络传输时会先将数据(结构体、map)等序列化成json字符串,到接收方得到json数据时,再反序列化恢复成原来的数据类型。这种方式已成为各个语言的标准。

    要解析成json格式,struct里面的字段必须大写!!!不然解析出来的是{}

    因为Json包相当于一个外包,字段大写才能被其调用。。。

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    type monster struct {
        Name     string
        Age      int
        Birthday string
        Sal      float64
        Skill    string
    }
    
    func testStruct() {
        m := monster{
            Name:     "牛魔王",
            Age:      10,
            Birthday: "1994-09-18",
            Sal:      10000.0,
            Skill:    "牛魔拳",
        }
        //序列化
        data, err := json.Marshal(&m)
        if err != nil {
            fmt.Println("序列化失败,error=", err)
        }
        fmt.Printf("序列化之后的结果:%v
    ", string(data))
    }
    
    func testMap() {
        var a map[string]interface{}
        a = make(map[string]interface{})
        a["name"] = "孙悟空"
        a["age"] = 20
        a["address"] = "水帘洞"
        a["skill"] = "七十二变"
        data, err := json.Marshal(a)
        if err != nil {
            fmt.Println("序列化失败,error=", err)
        }
        fmt.Printf("序列化之后的结果:%v
    ", string(data))
    }
    
    func testSlice() {
        var slice []map[string]interface{}
        var m1 map[string]interface{}
    
        m1 = make(map[string]interface{})
        m1["name"] = "孙悟空"
        m1["age"] = 20
        m1["address"] = "水帘洞"
        m1["skill"] = [2]string{"七十二变", "如意金箍棒"}
        slice = append(slice, m1)
        var m2 map[string]interface{}
    
        m2 = make(map[string]interface{})
        m2["name"] = "猪八戒"
        m2["age"] = 30
        slice = append(slice, m2)
        data, err := json.Marshal(slice)
        if err != nil {
            fmt.Println("序列化失败,error=", err)
        }
        fmt.Printf("序列化之后的结果:%v
    ", string(data))
    }
    
    func testFloat64() {
        var a float64
        a = 0.987
        data, err := json.Marshal(a)
        if err != nil {
            fmt.Println("序列化失败,error=", err)
        }
        fmt.Printf("序列化之后的结果:%v
    ", string(data))
    }
    
    func main() {
        testStruct()
        testMap()
        testSlice()
        testFloat64()
    }

    要想序列化成小写的,只需要用tag指定即可:

     

    对普通数据类型进行序列化是没意义的,只是相当于转换成string类型。 

  • 相关阅读:
    javascript UniqueID属性
    java中接口的定义与实现
    HPUX平台经常使用命令列举
    Vim简明教程【CoolShell】
    ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)
    void及void指针含义的深刻解析
    IE无法打开internet网站已终止操作的解决的方法
    Ubuntu下安装eclipse
    codeforces 444 C. DZY Loves Colors(线段树)
    Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的关系
  • 原文地址:https://www.cnblogs.com/xiximayou/p/11938441.html
Copyright © 2011-2022 走看看