使用反射
image.png- struct_def.go
package jsontest
type BasicInfo struct {
Name string `json:"name"`
Age int `json:"age"`
}
type JobInfo struct {
Skills []string `json:"skills"`
}
type Employee struct {
BasicInfo BasicInfo `json:"basic_info"`
JobInfo JobInfo `json:"job_info"`
}
json_test.go
package jsontest
import (
"encoding/json"
"fmt"
"reflect"
"testing"
)
var jsonStr = `{
"basic_info":{
"name":"Mike",
"age":30
},
"job_info":{
"skills":["Java","Go","C"]
}
} `
func TestEmbeddedJson(t *testing.T) {
e := new(Employee)
err := json.Unmarshal([]byte(jsonStr), e)
if err != nil {
t.Error(err)
}
fmt.Println(reflect.TypeOf(*e))
fmt.Println(e.BasicInfo)
if v, err := json.Marshal(e); err == nil {
fmt.Println(string(v))
} else {
t.Error(err)
}
}
- 你可以看到,我们使用内置的 json 模块进行解析
- 但是,这个模块的代码是使用反射实现的,它的性能比较低
- 你可以使用更多的扩展包获得更高的性能,例如 easyjson
网友评论