1.使用 json.Marshal 和 json.Unmarshal

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	// 使用 json.Marshal 将结构体转换为 JSON 字符串
	p := Person{Name: "Alice", Age: 30}
	jsonBytes, err := json.Marshal(p)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println(string(jsonBytes))

	// 使用 json.Unmarshal 将 JSON 字符串转换为结构体
	var newP Person
	err = json.Unmarshal(jsonBytes, &newP)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println(newP)
}

2.使用编码器和解码器

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
)

type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	// 使用编码器将结构体编码为 JSON 字符串
	p := Person{Name: "Alice", Age: 30}
	var buf bytes.Buffer
	encoder := json.NewEncoder(&buf)
	err := encoder.Encode(p)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println(buf.String())

	// 使用解码器将 JSON 字符串解码为结构体
	var newP Person
	decoder := json.NewDecoder(&buf)
	err = decoder.Decode(&newP)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println(newP)
}