GoJSON

GoJSON is a fast and easy package to marshal/unmarshal struct to/from json. You can use GoJSON tool to generate marshal/unmarshal code, in benchmark tests, GoJSON‘s generate code is almost 6~7 times faster than encoding/json.

Example

# 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)
        

For expose structs, gojson will generate MarshalJSON/UnmarshalJSON methods for marshal/unmarshal json. You also can use gojson.Marshal/gojson.Unmarshal functions to marshal/unmarshal json. If your field contains many escaped char, add escape to your field tag, it will improve preformance when unmarshal escape string.

Benchmark

Large Payload

Unmarshal

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 allocs/op
easyjson 157800 ns/op 332.60 MB/s 65388 B/op 286 allocs/op
gojay 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
encoding/json 437117 ns/op 120.07 MB/s 62657 B/op 205 allocs/op

Marshal

gojson 238.5 ns/op 220076.86 MB/s 1048 B/op 2 allocs/op
easyjson 235 ns/op 223039.53 MB/s 272 B/op 3 allocs/op
encoding/json 1232 ns/op 42610.66 MB/s 1369 B/op 10 allocs/op

Medium Payload

Unmarshal

gojson 3649 ns/op 592.74 MB/s 2457 B/op 10 allocs/op
jsonparser 6861 ns/op 315.25 MB/s 2304 B/op 1 allocs/op
easyjson 8951 ns/op 241.64 MB/s 2569 B/op 11 allocs/op
gojay 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 allocs/op
encoding/json 28891 ns/op 74.87 MB/s 2721 B/op 15 allocs/op

Marshal

gojson 282.5 ns/op 7656.48 MB/s 1048 B/op 2 allocs/op
easyjson 155.3 ns/op 13926.91 MB/s 264 B/op 3 allocs/op
encoding/json 1177 ns/op 1837.14 MB/s 1369 B/op 10 allocs/op

Small Payload

Unmarshal

gojson 598.3 ns/op 239.01 MB/s 296 B/op 5 allocs/op
jsonparser 701.1 ns/op 203.97 MB/s 144 B/op 1 allocs/op
easyjson 1058 ns/op 135.19 MB/s 272 B/op 8 allocs/op
gojay 606.3 ns/op 235.87 MB/s 296 B/op 5 allocs/op
jsoniter 1427 ns/op 100.22 MB/s 504 B/op 16 allocs/op
encoding/json 1873 ns/op 76.35 MB/s 448 B/op 7 allocs/op

Marshal

gojson 388.1 ns/op 368.49 MB/s 1048 B/op 2 allocs/op
easyjson 288.2 ns/op 496.20 MB/s 264 B/op 3 allocs/op
encoding/json 1009 ns/op 141.75 MB/s 1129 B/op 4 allocs/op

Questions

Any questions or bugs can go though github issues.

GitHub

View Github