json

Json數據協議
json
Json數據協議

  1. 導入包:Import “encoding/json”
  2. 序列化: json.Marshal(data interface{})
  3. 反序列化: json.UnMarshal(data []byte, v interface{})
package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    UserName string `json:"user_name"`
    NickName string `json:"nick_name"`
    Age int
    Birthday string
    Sex string
    Email string
    Phone string
}

func testStruct() {
    user1 := User{
        UserName:"user1",
        NickName: "阿三",
        Age: 18,
        Birthday: "1999-9-9",
        Sex: "男",
        Email: "[email protected]",
        Phone: "666666",
    }
    data, err := json.Marshal(user1)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(data))
}

func testMap() {
    var mp map[string]interface{}
    mp = make(map[string]interface{})
    //因爲map的值是空接口,所以值可以是任何類型
    mp["username"] = "user1"
    mp["age"] = 16
    mp["sex"] = "女"
    mp["score"] = 99.5

    data, err := json.Marshal(mp)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(data))
}

func testSlice() {
    var s []map[string]interface{}
    var mp map[string]interface{}
    mp = make(map[string]interface{})
    //因爲map的值是空接口,所以值可以是任何類型
    mp["username"] = "user66"
    mp["age"] = 17
    mp["sex"] = "女"
    mp["score"] = 100
    s = append(s, mp)

    //因爲map的值是空接口,所以值可以是任何類型
    mp["username"] = "user88"
    mp["age"] = 18
    mp["sex"] = "男"
    mp["score"] = 10
    s = append(s, mp)

    data, err := json.Marshal(s)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(data))
}

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

輸出:br/>{"user_name":"user1","nick_name":"阿三","Age":18,"Birthday":"1999-9-9","Sex":"男","Email":"[email protected]","Phone":"666666"}
{"age":16,"score":99.5,"sex":"女","username":"user1"}
[{"age":18,"score":10,"sex":"男","username":"user88"},{"age":18,"score":10,"sex":"男","username":"user88"}]

Process finished with exit code 0
反序列化例子(拿到一個json,要將它轉換爲go適合的格式):

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    UserName string `json:"username"`
    NickName string `json:"nickname"`
    Age      int
    Birthday string
    Sex      string
    Email    string
    Phone    string
}

func testStruct() (ret string, err error) {
    user1 := &User{
        UserName: "user1",
        NickName: "上課看似",
        Age:      18,
        Birthday: "2008/8/8",
        Sex:      "男",
        Email:    "[email protected]",
        Phone:    "110",
    }

    data, err := json.Marshal(user1)
    if err != nil {
        err = fmt.Errorf("json.marshal failed, err:", err)
        return
    }

    ret = string(data)
    return
}

func testMap() (ret string, err error) {
    var m map[string]interface{}
    m = make(map[string]interface{})
    m["username"] = "user1"
    m["age"] = 18
    m["sex"] = "man"

    data, err := json.Marshal(m)
    if err != nil {
        err = fmt.Errorf("json.marshal failed, err:", err)
        return
    }

    ret = string(data)
    return
}

func test2() {
    data, err := testMap()
    if err != nil {
        fmt.Println("test map failed, ", err)
        return
    }

    var m map[string]interface{}
    err = json.Unmarshal([]byte(data), &m)
    if err != nil {
        fmt.Println("Unmarshal failed, ", err)
        return
    }
    fmt.Println(m)
}

func test() {
    data, err := testStruct()
    if err != nil {
        fmt.Println("test struct failed, ", err)
        return
    }

    var user1 User
    err = json.Unmarshal([]byte(data), &user1)
    if err != nil {
        fmt.Println("Unmarshal failed, ", err)
        return
    }
    fmt.Println(user1)
}

func main() {
    test()
    test2()
}

輸出:
{user1 上課看似 18 2008/8/8 男 [email protected] 110}
map[age:18 sex:man username:user1]

Process finished with exit code 0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章