一个快速而简单的软件包——用于将结构体marshal/unmarshal到/从json中。

303 阅读3分钟

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

gojson91022 ns/op576.61 MB/s62393 B/op200 allocs/op
jsonparser91804 ns/op571.70 MB/s57344 B/op1个分配器/次
读取157800 ns/op332.60 MB/s65388 B/op286 allocs/op
呼叫中心84526 ns/op620.92 MB/s62393 B/op200 allocs/op
jsoniter142165 ns/op369.18 MB/s81216 B/op2162 allocs/op
编码/json437117 ns/op120.07 MB/s62657 B/op205 allocs/op

调用

读取238.5 ns/op220076.86 MB/s1048 B/op2次分配/次
淘宝网235 ns/op223039.53 MB/s272 B/op3个分配器/操作
编码/json1232 ns/op42610.66 MB/s1369 B/op10 allocs/op

中等有效载荷

未解锁

读取3649 ns/op592.74 MB/s2457 B/op10次分配/次
jsonparser6861 ns/op315.25 MB/s2304 B/op1个分配器/次
淘宝网8951 ns/op241.64 MB/s2569 B/op11 allocs/op
谷雨4145 ns/op521.79 MB/s2472 B/op9 allocs/op
jsoniter14565 ns/op148.51 MB/s5340 B/op86个分配数/次
编码/json28891 ns/op74.87 MB/s2721 B/op15 allocs/op

调用

读取282.5 ns/op7656.48 MB/s1048 B/op2次分配/次
淘宝网155.3 ns/op13926.91 MB/s264 B/op3个分配器/操作
编码/json1177 ns/op1837.14 MB/s1369 B/op10 allocs/op

小型有效载荷

移除

读取598.3 ns/op239.01 MB/s296 B/op5次分配/次
jsonparser701.1 ns/op203.97 MB/s144 B/op1个分配器/次
淘宝网1058 ns/op135.19 MB/s272 B/op8个分配器/次
呼叫中心606.3 ns/op235.87 MB/s296 B/op5个分配器/次
jsoniter1427 ns/op100.22 MB/s504 B/op16个分配器/次
编码/json1873 ns/op76.35 MB/s448 B/op7次分配/操作

调用

读取388.1 ns/op368.49 MB/s1048 B/op2次分配/次
淘宝网288.2 ns/op496.20 MB/s264 B/op3分配器/操作
编码/json1009 ns/op141.75 MB/s1129 B/op4个分配器/操作

问题

任何问题或bug都可以通过github问题来解决。