据说jsoniter的速度比golang标准库的速度快,我就来用了。
jsoniter提供的图表(它自己提供的哈,可不是我说的。图片网址是githubusercontent.com,所以国内用户可能看不到这个图):
项目地址 。
项目中文Wiki (竟然有中文!)。
虽说有了中文Wiki我再写这篇markdown显得有点憨,但我还是写一下吧。
序列化 结构体切片转换成JSON字符串/字节切片 (单个结构体也可以用同样的方法):
注意结构体的字段要大写,不然读取不到。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 package mainimport ( "fmt" jsoniter "github.com/json-iterator/go" ) type Menu struct { Id int Title string } func main () { var menus []Menu for i := 0 ; i < 10 ; i++ { menus = append (menus, Menu{Id: i, Title: "title " + fmt.Sprintf("%d" , i)}) } fmt.Println("Struct array:\n" , menus) res, err := jsoniter.Marshal(&menus) if err != nil { panic (err) } fmt.Println("\nJson bytes: \n" , res) string_res, err := jsoniter.MarshalToString(&menus) if err != nil { panic (err) } fmt.Println("\nJson string: " , string_res) }
终端输出:
1 2 3 4 5 6 7 8 ~/codeSet/goCode/test » go run main.go Struct array: [{0 title 0} {1 title 1} {2 title 2} {3 title 3} {4 title 4} {5 title 5} {6 title 6} {7 title 7} {8 title 8} {9 title 9}] Json bytes: [91 123 34 73 100 34 58 48 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 48 34 125 44 123 34 73 100 34 58 49 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 49 34 125 44 123 34 73 100 34 58 50 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 50 34 125 44 123 34 73 100 34 58 51 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 51 34 125 44 123 34 73 100 34 58 52 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 52 34 125 44 123 34 73 100 34 58 53 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 53 34 125 44 123 34 73 100 34 58 54 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 54 34 125 44 123 34 73 100 34 58 55 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 55 34 125 44 123 34 73 100 34 58 56 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 56 34 125 44 123 34 73 100 34 58 57 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 57 34 125 93] Json string: [{"Id":0,"Title":"title 0"},{"Id":1,"Title":"title 1"},{"Id":2,"Title":"title 2"},{"Id":3,"Title":"title 3"},{"Id":4,"Title":"title 4"},{"Id":5,"Title":"title 5"},{"Id":6,"Title":"title 6"},{"Id":7,"Title":"title 7"},{"Id":8,"Title":"title 8"},{"Id":9,"Title":"title 9"}]
反序列化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 package mainimport ( "fmt" jsoniter "github.com/json-iterator/go" ) type Menu struct { Id int Title string } func main () { var menus []Menu for i := 0 ; i < 10 ; i++ { menus = append (menus, Menu{Id: i, Title: "title " + fmt.Sprintf("%d" , i)}) } fmt.Println("Struct array:\n" , menus) string_res, err := jsoniter.MarshalToString(&menus) if err != nil { panic (err) } fmt.Println("\nJson string: " , string_res) var ms []Menu err = jsoniter.UnmarshalFromString(string_res, &ms) if err != nil { panic (err) } fmt.Println("\nDeserialization: \n" , ms) }
输出:
1 2 3 4 5 6 7 Struct array: [{0 title 0} {1 title 1} {2 title 2} {3 title 3} {4 title 4} {5 title 5} {6 title 6} {7 title 7} {8 title 8} {9 title 9}] Json string: [{"Id":0,"Title":"title 0"},{"Id":1,"Title":"title 1"},{"Id":2,"Title":"title 2"},{"Id":3,"Title":"title 3"},{"Id":4,"Title":"title 4"},{"Id":5,"Title":"title 5"},{"Id":6,"Title":"title 6"},{"Id":7,"Title":"title 7"},{"Id":8,"Title":"title 8"},{"Id":9,"Title":"title 9"}] Deserialization: [{0 title 0} {1 title 1} {2 title 2} {3 title 3} {4 title 4} {5 title 5} {6 title 6} {7 title 7} {8 title 8} {9 title 9}]
还有一些配置JSON的内容我就不写了,因为我暂时用不到: ( 建议看github上的Wiki。
本篇完。