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)) } }