golang 中对json数据读写 刺骨的言语ヽ痛彻心扉 2022-05-28 09:23 204阅读 0赞 编程中,我们很常会把数据以json格式保存在文件中或者读取json文件,golang有内置对json数据的处理包 [encoding/json][encoding_json] // file name: test.go package main import ( "encoding/json" "fmt" "log" "os" ) type User struct { Name string Age int8 } func testMarshal() []byte { user := User{ Name: "Tab", Age: 18, } data, err := json.Marshal(user) if err != nil { log.Fatal(err) } return data } func testUnmarshal(data []byte) { var user User err := json.Unmarshal(data, &user) if err != nil { log.Fatal(err) } fmt.Println(user) } func testRead() []byte { fp, err := os.OpenFile("./data.json", os.O_RDONLY, 0755) defer fp.Close() if err != nil { log.Fatal(err) } data := make([]byte, 100) n, err := fp.Read(data) if err != nil { log.Fatal(err) } fmt.Println(string(data[:n])) return data[:n] } func testWrite(data []byte) { fp, err := os.OpenFile("data.json", os.O_RDWR|os.O_CREATE, 0755) if err != nil { log.Fatal(err) } defer fp.Close() _, err = fp.Write(data) if err != nil { log.Fatal(err) } } func main() { var data []byte data = testMarshal() fmt.Println(string(data)) testWrite(data) data = testRead() testUnmarshal(data) } 这段代码主要是先对数据进行序列化然后保存到文件中,再从文件中读取json数据进行反序列化。 -------------------- 据说 [json-iteator][] 是目前golang中对json格式数据处理最快的包(**比官方json包快6倍**),好像是滴滴团队开源的,使用起来也非常方便,有兴趣的可以学习学习,下面我们看看官方的示例代码,使用起来也是很方便 package main import "github.com/json-iterator/go" type User struct { Name string Age int8 } func main() { user := User{ Name: "tanggu", Age: 18, } var jsoniter = jsoniter.ConfigCompatibleWithStandardLibrary // 序列化 data, err := jsoniter.Marshal(&user) if err != nil { log.Fatal(err) } fmt.Println(string(data)) // 反序列化 var people User err = jsoniter.Unmarshal(data, &people) if err != nil { log.Fatal(err) } fmt.Println(people) } [encoding_json]: https://golang.org/pkg/encoding/json/#RawMessage.MarshalJSON [json-iteator]: https://github.com/json-iterator/go
还没有评论,来说两句吧...