zoukankan      html  css  js  c++  java
  • 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)
    }
  • 相关阅读:
    ansible源码解读
    python标准模块(下)
    python学习之算法、自定义模块、系统标准模块(上)
    pathon 基础学习-集合(set),单双队列,深浅copy,内置函数
    python的map,filter,reduce学习
    python 列表
    python生成器、装饰器、正则
    python 模块学习
    python基础学习(一)--数据类型
    时间复杂度的计算
  • 原文地址:https://www.cnblogs.com/staff/p/13223443.html
Copyright © 2011-2022 走看看