• Go 结构体 JSON 序列化 反序列化


    先定义一对嵌套的结构体

    //Student 学生
    type Student struct {
        ID     int              `json:"id"`              //  "ID"首字母大写是因为要序列化,必须大写,json包里才能访问。  `json:"id"`是让序列化后,"ID"用小写表示
        Gender string    `json:"gender"`
        Name   string    `json:"name"`
    }

    //Class 班级
    type Class struct {
        Title    string                `json:"title"`
        Students []*Student    `json:"students"`
    }

    序列化和反序列化

    package main

    import (
        "encoding/json"
        "fmt"
    )

    func jsonSerialize(c *Class) string {
        // 对Class序列化
        data, err := json.Marshal(c)        //序列化,返回data为bytes类型
        if err != nil {
            fmt.Println("Class序列化失败")
            return ""
        }
        return fmt.Sprintf("%s", data)
    }

    func jsonDeserialize(s string) *Class {
        // 对Class反序列化
        c1 := Class{}
        err := json.Unmarshal([]byte(s),  &c1)       //传指针是为了能在json包里修改p2的值
        if err != nil {
            fmt.Println("Class反序列化失败")
            return nil
        }
        return &c1
    }

    func main() {
        c := &Class{
            Title:    "101",
            Students: make([]*Student, 0, 200),
        }
        for i := 0; i < 10; i++ {
            stu := &Student{
                Name:   fmt.Sprintf("stu%02d", i),
                Gender: "男",
                ID:     i,
            }
            c.Students = append(c.Students, stu)
        }
        // JSON序列化  c为内存地址
        fmt.Println(jsonSerialize(c))

        //JSON反序列化
        str := `{"Title":"101","Students":[{"ID":0,"Gender":"男","Name":"stu00"},{"ID":1,"Gender":"男","Name":"stu01"},{"ID":2,"Gender":"男","Name":"stu02"}]}`
        c1 := jsonDeserialize(str)
        fmt.Println(c1.Students[0])
        fmt.Printf("%#v ", c1)
    }
  • 相关阅读:
    modal 过程中添加动画
    SVSegmentedControl 标签页
    带输入框的UIAlertView
    Django小结
    译Step-by-Step Guide on Configuring Django-Userena
    使用国内镜像通过pip安装python 包
    pycryto实现AES加密解密算法
    notepad++搜索的一些东西
    [转]notepad++正则表达式替换字符串详解
    [转]Notepad++快捷键
  • 原文地址:https://www.cnblogs.com/staff/p/13223443.html
Copyright © 2020-2023  润新知