JSON解析內置反射方式
import (
"encoding/json"
"fmt"
)
type Users struct {
ID string `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
//結構體解析成json
user1 := Users{"1", "user1", 22}
s, err := json.Marshal(user1)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(string(s))
}
//json解析到結構體
var user2 Users
err = json.Unmarshal(s, &user2)
if err == nil {
fmt.Println(user2)
}
//map解析成json
m := make(map[string]interface{}, 2)
m["id"] = "a"
m["name"] = "bb"
var data []byte
if data, err = json.Marshal(m); err == nil {
fmt.Println(string(data))
}
//json解析成map
if err = json.Unmarshal(data, &m); err == nil {
fmt.Println(m)
}
}
easyJSON高性能代碼生成解析JSON
安裝:
go get github.com/mailru/easyjson
如果失敗,可以將項目克隆到$GOPATH/src/mailru 目錄下 並將包名改為easyjson,然后進入easyjson包下的easyjson目錄,運行go build 命令,再將生成的二進制文件放到$GOPATH/bin目錄下並改名為easyjson
使用:輸入命令easyjson -all models.go生成文件
type BasicInfo struct {
Name string
Age int
}
type JobInfo struct {
Skills []string
}
type Employee struct {
BasicInfo BasicInfo
JobInfo JobInfo
}
var jsonStr = `{
"basic_info":{
"name":"Mike",
"age":30
},
"job_info":{
"skills":["Java","Go","C"]
}
} `
func TestEasyJSON(t *testing.T) {
e := Employee{}
//調用easyJSON生成函數解析json
e.UnmarshalJSON([]byte(jsonStr))
t.Log(e)
//調用easyJSON生成函數解析json
if v, err := e.MarshalJSON(); err != nil {
t.Error(err)
} else {
t.Log(string(v))
}
}
