导航

megajson 高性能的json序列化、反序列化工具

Posted on 2015-02-09 16:50  蝈蝈俊  阅读(978)  评论(0编辑  收藏  举报

go 自带的 encoding/json 支持json的序列化和反序列化, 然而它是基于反射的,有下面几个缺点:

  • 反射是性能差的代名词, 并且无法在编译时进行优化。
  • 只有 Public 字段才可以,反射库只能反射出暴露出来的字段,这意味着你无法对private 字段进行JSON转化。

https://github.com/benbjohnson/megajson 针对这个问题做了优化,它是一个代码生成工具, 通过使用 go/parser 和 go/ast 包去产生你自己类型实体的自定义的 序列号和反序列化代码。 这里的序列号和反序列化知道你的数据类型,所以不会用反射,继而解决了上面问题。

通过测试, Go 1.2 下, Megajson  比 encoding/json 包有2倍的性能提升。

 

安装方法:

$ go get github.com/benbjohnson/megajson

 

使用:

直接运行 megajson 命令,它会产生你需要的序列化和反序列化文件:

$ megajson mypkg/my_file.go

这样会产生2个文件:

mypkg/my_file_encoder.go
mypkg/my_file_decoder.go

 

它的使用比较简单,如下:

err := NewMyStructEncoder(writer).Encode(val)
err := NewMyStructDecoder(reader).Decode(&val)