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

  • 相关阅读:
    error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 E:OCX
    JQUERY解析XML IE8的兼容问题
    IE11下,IIS7.5不自动生成__doPostBack事件
    IE11无法支持Forms认证,,,也就是无法保存COOKIE
    IIS7.5真变态,服务器时间格式导致不生成WebResource.axd
    django ajax MTV与MVC 多对多创建方式
    django F与Q查询 事务 only与defer
    模型层
    模板层(模板语法)
    django 路由层 伪静态网页 虚拟环境 视图层
  • 原文地址:https://www.cnblogs.com/xiximayou/p/11938441.html
Copyright © 2011-2022 走看看