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)
    }
  • 相关阅读:
    微服务负载均衡技术
    dubbo 协议注册中心
    dubbo 元数据中心
    @Autowired 写在构造方法上
    onchange事件 is not defined
    转:JNDI的本质及作用
    The valid characters are defined in RFC 7230 and RFC 3986报错处理
    FOR XML PATH 简单介绍
    ROW_NUMBER() OVER函数的基本用法
    java和js中JSONObject,JSONArray,Map,String之间转换
  • 原文地址:https://www.cnblogs.com/staff/p/13223443.html
Copyright © 2011-2022 走看看