zoukankan      html  css  js  c++  java
  • json的序列化和反序列化

    一、结构体转json

    package main
    
    import (
    
        "fmt"
        "encoding/json"
    
    )
    
    type User struct {
        UserName string `json:"username"`
        NickName string `json:"nickname"`
        Age      int
        Birthday string
        Sex      string
        Email    string
        Phone    string
    }
    /*结构体转json*/
    
    func testStruct() {
        user1 := &User{
            UserName: "user1",
            NickName: "上课看似",
            Age:      18,
            Birthday: "2008/8/8",
            Sex:      "男",
            Email:    "mahuateng@qq.com",
            Phone:    "110",
        }
    
        data, err := json.Marshal(user1)
        if err != nil {
            fmt.Printf("json.marshal failed, err:", err)
            return
        }
    
        fmt.Printf("%s
    ", string(data))
    }
    
    func main() {
        testStruct()
        fmt.Println("----")
    }
    

    输出如下:

    PS E:golanggo_prosrcsafly> go run demo.go
    {"username":"user1","nickname":"上课看似","Age":18,"Birthday":"2008/8/8","Sex":"男","Email":"mahuateng@qq.com","Phone":"110"}
    ----
    PS E:golanggo_prosrcsafly>
    

    二、map转json

    package main
    
    import (
    
        "fmt"
        "encoding/json"
    
    )
    
    type User struct {
        UserName string `json:"username"`
        NickName string `json:"nickname"`
        Age      int
        Birthday string
        Sex      string
        Email    string
        Phone    string
    }
    /*map转json*/
    
    func testMap() {
        var mmp  map[string]interface{}
        mmp = make(map[string]interface{})
    
        mmp["username"] = "user"
        mmp["age"] = 19
        mmp["sex"] = "man"
    
        data,err := json.Marshal(mmp)
        if err != nil{
            fmt.Println("json marshal failed,err:",err)
            return
        }
        fmt.Println("%s
    ",string(data))
    }
    
    func main() {
        testMap()
        fmt.Println("----")
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    输出如下:
    
    PS E:golanggo_prosrcsafly> go run demo.go
    {"age":19,"sex":"man","username":"user"}
    ----
    PS E:golanggo_prosrcsafly>
    1
    2
    3
    4
    int转json
    package main
    
    import (
    
        "fmt"
        "encoding/json"
    
    )
    
    type User struct {
        UserName string `json:"username"`
        NickName string `json:"nickname"`
        Age      int
        Birthday string
        Sex      string
        Email    string
        Phone    string
    }
    /*slice转json*/
    
    func testSlice() {
    
    }
    
    
    func testInt() {
        var age = 100
        data, err := json.Marshal(age)
        if err != nil {
            fmt.Printf("json.marshal failed, err:", err)
            return
        }
    
        fmt.Printf("%s
    ", string(data))
    }
    
    func main() {
        testSlice()
        testInt()
        fmt.Println("----")
    }
    

    输出如下:

    PS E:golanggo_prosrcsafly> go run demo.go
    100
    ----
    PS E:golanggo_prosrcsafly>

    三、slice转json

    package main
    
    import (
    
        "fmt"
        "encoding/json"
    
    )
    
    
    func testSlice() {
        var m map[string]interface{}
        var s []map[string]interface{}
        m = make(map[string]interface{})
        m["username"] = "user1"
        m["age"] = 18
        m["sex"] = "man"
    
        s = append(s, m)
    
        m = make(map[string]interface{})
        m["username"] = "user2"
        m["age"] = 29
        m["sex"] = "female"
        s = append(s, m)
    
        data, err := json.Marshal(s)
        if err != nil {
            fmt.Printf("json.marshal failed, err:", err)
            return
        }
    
        fmt.Printf("%s
    ", string(data))
    }
    
    func main() {
        testSlice()
    
    }
    

    输出如下:

    PS E:golanggo_prosrcsafly> go run demo.go
    [{"age":18,"sex":"man","username":"user1"},{"age":29,"sex":"female","username":"user2"}]
    PS E:golanggo_prosrcsafly>
    

    四、json反序列化为结构体

    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:    "mahuateng@qq.com",
            Phone:    "110",
        }
    
        data, err := json.Marshal(user1)
        if err != nil {
            err = fmt.Errorf("json.marshal failed, err:", err)
            return
        }
    
        ret = string(data)
        return
    }
    
    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()
    }
    

    输出如下:

    PS E:golanggo_prosrcsafly> go run demo.go
    {user1 上课看似 18 2008/8/8 男 mahuateng@qq.com 110}
    PS E:golanggo_prosrcsafly>
  • 相关阅读:
    Go基础篇【第2篇】: 内置库模块 fmt
    Go基础篇【第1篇】: 内置库模块 OS
    JavaScript学习基础篇【第1篇】: JavaScript 入门
    Python基础篇【第8篇】: Socket编程(二)SocketServer
    Python基础篇【第7篇】: 面向对象(1)
    APP爬虫之Appium使用
    python操作MongoDB
    MySQL性能调优
    ubuntu16.04中启动anaconda图形化界面
    linux 在命令行中通过conda使用anaconda
  • 原文地址:https://www.cnblogs.com/wuchangblog/p/14761709.html
Copyright © 2011-2022 走看看