GoJSON
GoJSON 是一个快速而简单的软件包,用于将结构体marshal/unmarshal到/来自json。你可以使用 工具来生成marshal/unmarshal代码,在基准测试中, 的生成代码几乎比 快6~7倍。GoJSON GoJSON encoding/json
例子
# install
go get -u -v github.com/go-fish/gojson
cd ${GOPATH}/src/github.com/go-fish/gojson/cmd/gojson
go build -o gojson main.go
# usage
gojson [flags] [file|directory]...
Flags:
--escapehtml escape html char when encode object to json
--escapeunicode escape unicode rune when decode object to json
-h, --help help for gojson
-o, --output string the filename of output file (default "gojson.generated.go")
--unsafe use input data directly without copy when decode json bytes (default true)
对于暴露的结构,gojson会生成MarshalJSON/UnmarshalJSON 方法来marshal/unmarshal json。你也可以使用gojson.Marshal/gojson.Unmarshal 函数来marshal/unmarshal json。如果你的字段包含许多转义字符,可以在你的字段标签中添加escape ,这将提高解读转义字符串的性能。
基准测试
大的有效载荷
解除sharshal
| gojson | 91022 ns/op | 576.61 MB/s | 62393 B/op | 200 allocs/op |
|---|
| jsonparser | 91804 ns/op | 571.70 MB/s | 57344 B/op | 1个分配器/次 |
| 读取 | 157800 ns/op | 332.60 MB/s | 65388 B/op | 286 allocs/op |
| 呼叫中心 | 84526 ns/op | 620.92 MB/s | 62393 B/op | 200 allocs/op |
| jsoniter | 142165 ns/op | 369.18 MB/s | 81216 B/op | 2162 allocs/op |
| 编码/json | 437117 ns/op | 120.07 MB/s | 62657 B/op | 205 allocs/op |
调用
| 读取 | 238.5 ns/op | 220076.86 MB/s | 1048 B/op | 2次分配/次 |
|---|
| 淘宝网 | 235 ns/op | 223039.53 MB/s | 272 B/op | 3个分配器/操作 |
| 编码/json | 1232 ns/op | 42610.66 MB/s | 1369 B/op | 10 allocs/op |
中等有效载荷
未解锁
| 读取 | 3649 ns/op | 592.74 MB/s | 2457 B/op | 10次分配/次 |
|---|
| jsonparser | 6861 ns/op | 315.25 MB/s | 2304 B/op | 1个分配器/次 |
| 淘宝网 | 8951 ns/op | 241.64 MB/s | 2569 B/op | 11 allocs/op |
| 谷雨 | 4145 ns/op | 521.79 MB/s | 2472 B/op | 9 allocs/op |
| jsoniter | 14565 ns/op | 148.51 MB/s | 5340 B/op | 86个分配数/次 |
| 编码/json | 28891 ns/op | 74.87 MB/s | 2721 B/op | 15 allocs/op |
调用
| 读取 | 282.5 ns/op | 7656.48 MB/s | 1048 B/op | 2次分配/次 |
|---|
| 淘宝网 | 155.3 ns/op | 13926.91 MB/s | 264 B/op | 3个分配器/操作 |
| 编码/json | 1177 ns/op | 1837.14 MB/s | 1369 B/op | 10 allocs/op |
小型有效载荷
移除
| 读取 | 598.3 ns/op | 239.01 MB/s | 296 B/op | 5次分配/次 |
|---|
| jsonparser | 701.1 ns/op | 203.97 MB/s | 144 B/op | 1个分配器/次 |
| 淘宝网 | 1058 ns/op | 135.19 MB/s | 272 B/op | 8个分配器/次 |
| 呼叫中心 | 606.3 ns/op | 235.87 MB/s | 296 B/op | 5个分配器/次 |
| jsoniter | 1427 ns/op | 100.22 MB/s | 504 B/op | 16个分配器/次 |
| 编码/json | 1873 ns/op | 76.35 MB/s | 448 B/op | 7次分配/操作 |
调用
| 读取 | 388.1 ns/op | 368.49 MB/s | 1048 B/op | 2次分配/次 |
|---|
| 淘宝网 | 288.2 ns/op | 496.20 MB/s | 264 B/op | 3分配器/操作 |
| 编码/json | 1009 ns/op | 141.75 MB/s | 1129 B/op | 4个分配器/操作 |
问题
任何问题或bug都可以通过github问题来解决。