在web开发中,json好像是一个绕不开的一个模块,今天我们来讲一下golang的json标准库.
encoding/json是golang官方提供的json标准款,实现了RFC 7159中定义的JSON编码和解码.在使用的过程中需要预先定义好struct.相对来说,其性能较低.
其提供了两个函数,
下面我们具体来实践一下:
1,结构体解析为json
type CodeType struct {
Name string
}
func main() {
codeType := CodeType{
Name: "Golang",
}
jsonInfo, err := json.Marshal(codeType)
if err != nil {
fmt.Println( err)
}
os.Stdout.Write(jsonInfo)
}
输出结果为:
{"Name":"Golang"}
2.json解析为结构体
type CodeType struct {
Name string
}
func main() {
var jsonInfo =[]byte(`[
{"Name":"Golang"},{"Name":"Python"}
]`)
var codeType []CodeType
err :=json.Unmarshal(jsonInfo,&codeType)
if err !=nil {
fmt.Println(err)
}
fmt.Printf("%+v",codeType)
}
输出结果为:
[{Name:Golang} {Name:Python}]
json标准库目前就这两个方法
但是其有性能瓶颈,主要问题在于反射机制,这时候优秀的第三方库应运而生。
接下来我们介绍两个好用的json解析库easyjson和ffjson
这两个库并没有用反射的原理去实现,而是为struct生成静态的MarshalJSON和UnmarshalJSON函数,这种类似于预编译,调用编码解码时直接使用生成的函数,从而减少对反射的依赖,比标准库效率要高很多,但是也有弊端,用起来相对麻烦
这个就留给大家自己探索吧