结论
指针值则编码其指向的值。 nil指针则编码为空JSON值。通过reflect包中的Elem方法实现。
函数原型
官方文档中是这样说明的:
尝试:
package main
import (
"fmt"
"encoding/json"
)
// 定义一个结构体,用于被序列化
type Monster struct{
Age int
Name string
Skill string
}
func main(){
var monster Monster = Monster{500, "牛魔王", "牛动拳"}
data1, err1 := json.Marshal(monster) // 直接传结构体本身
if err1!=nil{
fmt.Println("序列化monster时,发生错误", err1)
return
}
data2, err2 := json.Marshal(&monster) // 传结构体的地址
if err2!=nil{
fmt.Println("序列化&monster时,发生错误", err2)
return
}
data3, err3 := json.Marshal(3.14) // 对基本数据类型的序列化意义不大
if err3!=nil{
fmt.Println("序列化3.14时,发生错误", err3)
return
}
fmt.Println("data1 =", string(data1))
fmt.Println("data2 =", string(data2))
fmt.Println("data3 =", string(data3))
}