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

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)
时间: 2024-11-05 20:48:57

megajson 高性能的json序列化、反序列化工具的相关文章

Swifter.Json -- 在 .Net 平台上的一个功能强大,简单易用,稳定又不失高性能的 JSON 序列化和反序列化工具。

Swifter.Json Github Wiki 在 .Net 平台上的一个功能强大,简单易用,稳定又不失高性能的 JSON 序列化和反序列化工具. Swifter.Json 已经经过了大量测试和线上项目中运行许久来确保它的稳定性. 特性 1: 支持 .Net 上绝大多是的数据类型,且轻松扩展:包括但不限于:实体,字典,集合,迭代器,数据读取器和表格. 2: 支持 .Net 我已知的大多数平台,包括但不限于:.Net Framework 2.0+, .Net Core 2.0+, .Net St

常用json序列化/反序列化技术对比测试

目前常用的json工具有:1.json-lib:2.jakson-mapper:3.fastjson. 下面对这三种工具的性能进行简单对比测试. 测试样本:一个126K的json文件,内容为json数组. 测试方法:反序列化,读取文件中的json转化为java对象. 测试代码如下: 1 @Test 2 public void testDeserialize() throws Exception { 3 String dealer = "d:\\auto\\json\\100016109.js&q

c#序列化反序列化工具(json,binary,xml)

using System; using System.Text; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization.Json; namespace weekReportPlan { public static class SerializeHelper { /// <summary> /// 将一个对象序列化为字节(byte)数组 /

Json序列化java工具类

json序列化通用工具类(java) >为了支持此工具类的正常使用,先导入以下jar包 1.lombok包是一个简化java冗余代码的jar包,实际开发中很方便 在maven的pom文件中导入lombok坐标 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version&

nodejs - json序列化&amp;反序列化示例

1 // demo-json.js 2 var obj = { 3 "name": "LiLi", 4 "age": 22, 5 "sex": "F" 6 }; 7 8 var str = JSON.stringify(obj); 9 console.log(str); 10 11 var obj2 = JSON.parse(str); 12 console.log(obj2); json序列化最终结果是字

python json 序列化反序列化 和 中文编码问题

在一个项目中,需要从云端获取一个json格式的数据,并保存到本地文件中,然后再读取出来,这中间要用到json的dumps方法和loads方法,以实现数据的序列化和反序列化.具体来说,dumps方法,可将json格式数据序列为python的相关的数据类型,通常用于打印等:loads方法则是相反,把python数据类型转换为json相应的数据类型格式要求,反序列化后可以对json数据进行各种操作.在编程过程还发现一个问题,在序列化时,中文汉字总是被转换为unicode码,在网上搜索后发现,在dump

.NET中Json序列化反序列化操作辅助类——基于Json.NET

/// <summary> /// Json操作辅助类 /// </summary> public static class JsonHelper { private static JsonSerializerSettings _jsonSettings; static JsonHelper() { IsoDateTimeConverter datetimeConverter = new IsoDateTimeConverter(); datetimeConverter.DateT

Newtonsoft.Json 序列化反序列化

public class People { public string name { get; set; } public string age { get; set; } public string sex { get; set; } }List<People> list = new List<People>(); list.Add(new People { name = "Jane", age = "18", sex = "fe

JSON序列化反序列化

JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在各种网络.平台和程序之间传输.JSON的语法很简单,易于人阅读和编写,同时也易于机器解析和生成. JSON与XML的比较 ◆可读性 JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解.◆文件大小与传输 XML允许使用方便的标签,所以文件尺寸是要比JSON大的.而且JS