jsoniter高性能json庫
非常快,支持java和go
marshal使用的一些坑
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Id int `json:"id,string"` //加了這個序列化到json中int類型會被轉換成string類型
Name string `json:"name"` //加了這個打印出來就是小寫的name
//age int 如果這里是小寫的age,則序列化之后print無法打印出來,marshal只可以序列化可以導出的屬性
Age int `json:"age,omitempty"` //加了omitempty之后,如果該值為初始化空值,則不會輸出,因為是int所以這里是0
Address string `json:"-"` //加了中划線的值是絕對被忽略的
}
func main() {
var json = jsoniter.ConfigCompatibleWithStandardLibrary //使用jsoniter第三方包替換官方json模塊提升json模塊性能
u := User{
Id: 12,
Name: "Jerry",
Age: 0,
}
data, err := json.Marshal(&u) //data是byte類型
if err != nil {
return
}
fmt.Println(string(data)) //{"id":"0","name":"Jerry"} //因為Age是0所以被omitempty過濾了,Address被-過濾了
u2 := &User{}
json.Unmarshal(data, u2) //反序列化data仍然需要使用byte類型
fmt.Println(u2) //&User{12 jerry 0} 可以發現Address沒有反序列化,被過濾掉的字段無法反序列化到結構體中
}