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 标记可以表示如果字段值为空则不进行序列化