encoding/jsonjson.Marshal()json.Unmarshal()

以下是一个示例:

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name  string `json:"name"`
	Age   int    `json:"age"`
	Email string `json:"email,omitempty"`
}

func main() {
	// 序列化
	user := User{
		Name: "Tom",
		Age:  20,
	}
	data, err := json.Marshal(user)
	if err != nil {
		fmt.Println("JSON marshal failed:", err)
		return
	}
	fmt.Println(string(data))

	// 反序列化
	jsonStr := `{"name":"Tom","age":20}`
	var user2 User
	err = json.Unmarshal([]byte(jsonStr), &user2)
	if err != nil {
		fmt.Println("JSON unmarshal failed:", err)
		return
	}
	fmt.Printf("Name: %s, Age: %d\n", user2.Name, user2.Age)
}
json:"name"json.Marshal()json.Unmarshal()

输出结果为:

{"name":"Tom","age":20}
Name: Tom, Age: 20

需要注意的是,在序列化和反序列化时,结构体中的字段名、类型以及可见性等因素都会影响序列化和反序列化过程。使用 tag 可以帮助我们控制 JSON 字段名,omitempty 标记可以表示如果字段值为空则不进行序列化