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类型。 

  • 相关阅读:
    Angularjs 设置全局变量的3种方法
    prevent to do sth 与 prevent sb (from) doing 用法
    软件测试技术对程序员的重要性
    Javascript中setTimeout()以及clearTimeout( )的使用
    Javascript异步编程的常用方法
    软件设计原则总结
    为sublime Text3 安装插件JS Format
    javascript中 if(变量)和if(变量==true)的区别
    Ping 命令
    ipconfig
  • 原文地址:https://www.cnblogs.com/xiximayou/p/11938441.html
Copyright © 2011-2022 走看看