[golang]标准库-json

前言

json数据格式通常包含两个操作:序列化(把对象转换成JSON数据类型)和反序列化(把JSON数据类型转换成对象),二者操作互逆。

Go语言中相关标准库为encoding/json

示例代码

package main

import (
	"encoding/json"
	"fmt"
)

type JsonExample struct {
	Name   string   `json:"name,omitempty"` // 序列化后显示为name,若其值为空,则不显示该字段
	Age    int      `json:"age"`            // 序列化后显示为age
	School string   `json:"university"`     // 序列化后显示为university
	Class  []string `json:"class"`
}

// 对象序列化为json
func JsonMarshal() {
	var jex JsonExample = JsonExample{
		Name:   "Go",
		Age:    12,
		School: "TsingHua",
		Class:  []string{"YuWen", "ShuXue", "YingYu"},
	}
	by, _ := json.Marshal(jex)
	fmt.Println(string(by))
}

// json反序列化为对象
func JsonUnmarshal() {
	var v JsonExample
	by := []byte(`{"name": "python","age":18,"university": "ustc","class": ["WuLi","HuaXue","ShengWu"]}`)
	json.Unmarshal(by, &v)
	fmt.Printf("%+v\n", v)
}

func main() {
	JsonMarshal() // {"name":"Go","age":12,"university":"TsingHua","class":["YuWen","ShuXue","YingYu"]}
	fmt.Println("=============")
	JsonUnmarshal() // {Name:python Age:18 School:ustc Class:[WuLi HuaXue ShengWu]}
}

注意事项:

  • 如果知道反序列化之后的具体结构,那么应该先定义一个符合反序列之后的结构体。
  • 如果不知道反序列化之后的具体结构,那么应该使用interface来表示任意类型。
  • 结构体定义时的标签用于指定序列化之后的显示。

参考文档

posted @ 2022-01-09 01:29  花酒锄作田  阅读(72)  评论(0编辑  收藏  举报