(三十八)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\n", 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\n", 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\n", 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\n", string(data))
}

func main() {
    testStruct()
    testMap()
    testSlice()
    testFloat64()
}

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

 

對普通數據類型進行序列化是沒意義的,只是相當於轉換成string類型。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM