• 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)
    }
  • 相关阅读:
    Minimum Depth of Binary Tree leetcode java
    Maximum Depth of Binary Tree leetcode java
    Symmetric Tree leetcode java
    Same Tree leetcode java
    Binary Tree Postorder Traversal leetcode java
    Binary Tree Preorder Traversal leetcode java
    Binary Tree Inorder Traversal leetcode java
    Combinations leetcode java
    一键清除Centos iptables 防火墙所有规则
    阿里云centos7.7x64安装open,并配置ip转发和nat伪装
  • 原文地址:https://www.cnblogs.com/staff/p/13223443.html
Copyright © 2020-2023  润新知