推荐答案
在 Go 语言中,可以使用标准库 encoding/json 来进行 JSON 的序列化和反序列化操作。
JSON 序列化
要将 Go 结构体或数据序列化为 JSON 字符串,可以使用 json.Marshal 函数。
// www.javascriptcn.com code example
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
p := Person{Name: "Alice", Age: 30}
jsonData, err := json.Marshal(p)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(jsonData))
}JSON 反序列化
要将 JSON 字符串反序列化为 Go 结构体或数据,可以使用 json.Unmarshal 函数。
// www.javascriptcn.com code example
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
jsonData := `{"name":"Alice","age":30}`
var p Person
err := json.Unmarshal([]byte(jsonData), &p)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(p)
}本题详细解读
JSON 序列化
json.Marshal函数:该函数接受一个 Go 结构体或数据,并将其序列化为 JSON 格式的字节数组。如果序列化成功,返回的字节数组可以转换为字符串输出。- 结构体标签:在结构体字段后使用
`json:"field_name"`标签,可以指定该字段在 JSON 中的名称。如果不指定标签,默认使用字段名作为 JSON 键名。
JSON 反序列化
json.Unmarshal函数:该函数接受一个 JSON 格式的字节数组和一个指向目标结构体的指针,将 JSON 数据反序列化到该结构体中。- 结构体标签:与序列化时相同,结构体字段的标签用于指定 JSON 键名与结构体字段的映射关系。
注意事项
- 如果 JSON 数据中的字段与结构体字段不匹配,反序列化时会忽略该字段。
- 如果结构体字段是私有的(即首字母小写),则无法进行序列化和反序列化。
- 序列化和反序列化过程中可能会遇到错误,建议始终检查错误返回值。