Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


腾讯开源高性能JSON解析器及生成器 RapidJSON

2015-4-13 09:46    评论: 11    

RapidJSON是腾讯公司开源的一个C++的高性能的JSON解析器及生成器,同时支持SAX/DOM风格的API。

项目源码地址: 

RapidJSON的灵感来自RapidXml,它具有以下特点:

  • RapidJSON小而全。同时支持SAX和DOM风格的API,SAX解析器只有约500行代码。
  • RapidJSON快。它的性能可与strlen()相比。可支持SSE2/SSE4.1加速。
  • RapidJSON独立。它不依赖于BOOST等外部库。它甚至不依赖于STL。
  • RapidJSON对内存友好。在大部分32/64位机器上,每个JSON值只占16或20字节(除字符串外)。它预设使用一个快速的内存分配器,令分析器可以紧凑地分配内存。
  • RapidJSON对Unicode友好。它支持UTF-8、UTF-16、UTF-32 (大端序/小端序),并内部支持这些编码的检测、校验及转码。例如,RapidJSON可以在分析一个UTF-8文件至DOM时,把当中的JSON字符串转码至UTF-16。它也支持代理对(surrogate pair)及"\\u0000"(空字符)。
  • RapidJSON是跨平台的。以下是一些曾测试的平台/编译器组合: 
    • Visual C++ 2008/2010/2013 在 Windows (32/64-bit)
    •    GNU C++ 3.8.x 在 Cygwin
    •    Clang 3.4 在 Mac OS X (32/64-bit) 及 iOS
    •    Clang 3.4 在 Android NDK

用户也可以在他们的平台上生成及执行单元测试。

更多腾讯公司开源项目,可见这里:https://code.csdn.net/Tencent

发表评论


最新评论

我也要发表评论

tenght 2015-4-14 19:51
这个确实不错~
回复
wiiiky 2015-4-14 18:20
[点击展开更多楼层]
2
来自 - 广东深圳 的 Chrome/Windows 用户 发表于 2015-4-13 10:49 的评论:
无知无畏啊
3
wiiiky 发表于 2015-4-13 13:53 的评论:
那你发表一下你的高见呗?

解析器约只有500行代码。被广泛使用的cJSON只有一个文件,只有700+代码。去GITHUB上找到最少的只要300行代码;而且人家是C语言写的,不仅跑得快而且编译快。一个JSON解析器代码少不是很正常的吗,到这里是一种feature了。

它的性能可与strlen()相比。这就更奇葩了,他们的比法估计是strlen的速度是O(n),然后这个解析器的速度也是O(n),然后他们就可以相比了;但事实上只有n无限大时他们才有可比性,因为strlen是 1n,而解析器是100n(随便编的一个数字,反正比1大很多)。

另外SSE是什么鬼,百度了一下是种硬件指令,难道他们还用了汇编?如果是,那不得不说是吊。

独立,呵呵,和500行一样,没什么可说的。

对内存友好,这很奇葩,预先分配内存,不就是slice,敢情它还内置了一个slice分配器?在其他平台上不清楚,在linux平台上的malloc经过多年优化,速度已经和slice没有区别了。

对unicode友好,我对unicode的解析不是很清楚,不过我知道的是几乎所有json解析器都支持unicode。因为unicode是json标准里就说过的,不支持它就表示没有完全实现json。

但是说了这么多,最重要的是数据;高性能那么得有依据吧,至少和现在主流的json解析器比
4
来自 - 广东深圳 的 Chrome/Windows 用户 发表于 2015-4-14 18:04 的评论:
你看你最开始的回复,“一个json解析器还能高性能到哪里去,也是服了。”json解析器怎么就不能高性能了?在当前应用大量采用 rest 接口 + json 这种模式下,一个高性能的json解析器是必要的。
我对腾讯这个json的性能不了解,但是对你认为 json 解析器不需要高性能 表示严重不爽。
我是对腾讯开源个json解析器还这么高调表示不爽,另外json解析器之间速度相差很小,除非真的写的很糟糕,说高性能本来就言过其实。
5 回复
来自 - 广东深圳 的 Chrome/Windows 用户 2015-4-14 18:04
1
wiiiky 发表于 2015-4-13 10:33 的评论:
一个json解析器还能高性能到哪里去,也是服了。
这么高性能怎么不用C写,要是高性能web服务器还像话。还高性能json解析器,我这里还有高性能hello world。
2
来自 - 广东深圳 的 Chrome/Windows 用户 发表于 2015-4-13 10:49 的评论:
无知无畏啊
3
wiiiky 发表于 2015-4-13 13:53 的评论:
那你发表一下你的高见呗?

解析器约只有500行代码。被广泛使用的cJSON只有一个文件,只有700+代码。去GITHUB上找到最少的只要300行代码;而且人家是C语言写的,不仅跑得快而且编译快。一个JSON解析器代码少不是很正常的吗,到这里是一种feature了。

它的性能可与strlen()相比。这就更奇葩了,他们的比法估计是strlen的速度是O(n),然后这个解析器的速度也是O(n),然后他们就可以相比了;但事实上只有n无限大时他们才有可比性,因为strlen是 1n,而解析器是100n(随便编的一个数字,反正比1大很多)。

另外SSE是什么鬼,百度了一下是种硬件指令,难道他们还用了汇编?如果是,那不得不说是吊。

独立,呵呵,和500行一样,没什么可说的。

对内存友好,这很奇葩,预先分配内存,不就是slice,敢情它还内置了一个slice分配器?在其他平台上不清楚,在linux平台上的malloc经过多年优化,速度已经和slice没有区别了。

对unicode友好,我对unicode的解析不是很清楚,不过我知道的是几乎所有json解析器都支持unicode。因为unicode是json标准里就说过的,不支持它就表示没有完全实现json。

但是说了这么多,最重要的是数据;高性能那么得有依据吧,至少和现在主流的json解析器比
你看你最开始的回复,“一个json解析器还能高性能到哪里去,也是服了。”json解析器怎么就不能高性能了?在当前应用大量采用 rest 接口 + json 这种模式下,一个高性能的json解析器是必要的。
我对腾讯这个json的性能不了解,但是对你认为 json 解析器不需要高性能 表示严重不爽。
回复
来自 - 北京 的 Chrome/Mac 用户 2015-4-14 17:57
1
wiiiky 发表于 2015-4-13 13:56 的评论:
但是说了这么多,最重要的是数据;高性能那么得有依据吧,至少和现在主流的json解析器比比,没有比较结果也敢说高性能?

我不反对开放代码,但反对随便写点东西就到处装逼、邀功的,故弄玄虚,好像全世界都要感谢他是的。
最后看看人家cJSON的描述是怎么写的。

An ultra-lightweight, portable, single-file, simple-as-can-be ANSI-C compliant JSON parser, under MIT license
RapidJSON的文档中有专门一节是《性能》
1 回复
来自 - 北京人民大学 的 Safari/Mac 用户 2015-4-13 17:28
腾讯的repo是fork自miloyip/rapidjson的,fork完就没管了。
4 回复
linux 2015-4-13 15:19
1
wiiiky 发表于 2015-4-13 10:33 的评论:
一个json解析器还能高性能到哪里去,也是服了。
这么高性能怎么不用C写,要是高性能web服务器还像话。还高性能json解析器,我这里还有高性能hello world。
2
来自 - 广东深圳 的 Chrome/Windows 用户 发表于 2015-4-13 10:49 的评论:
无知无畏啊
3
wiiiky 发表于 2015-4-13 13:53 的评论:
那你发表一下你的高见呗?

解析器约只有500行代码。被广泛使用的cJSON只有一个文件,只有700+代码。去GITHUB上找到最少的只要300行代码;而且人家是C语言写的,不仅跑得快而且编译快。一个JSON解析器代码少不是很正常的吗,到这里是一种feature了。

它的性能可与strlen()相比。这就更奇葩了,他们的比法估计是strlen的速度是O(n),然后这个解析器的速度也是O(n),然后他们就可以相比了;但事实上只有n无限大时他们才有可比性,因为strlen是 1n,而解析器是100n(随便编的一个数字,反正比1大很多)。

另外SSE是什么鬼,百度了一下是种硬件指令,难道他们还用了汇编?如果是,那不得不说是吊。

独立,呵呵,和500行一样,没什么可说的。

对内存友好,这很奇葩,预先分配内存,不就是slice,敢情它还内置了一个slice分配器?在其他平台上不清楚,在linux平台上的malloc经过多年优化,速度已经和slice没有区别了。

对unicode友好,我对unicode的解析不是很清楚,不过我知道的是几乎所有json解析器都支持unicode。因为unicode是json标准里就说过的,不支持它就表示没有完全实现json。

但是说了这么多,最重要的是数据;高性能那么得有依据吧,至少和现在主流的json解析器比
认真理智的分析,赞一个。确如所言,show me your score.
回复
wiiiky 2015-4-13 13:56
但是说了这么多,最重要的是数据;高性能那么得有依据吧,至少和现在主流的json解析器比比,没有比较结果也敢说高性能?

我不反对开放代码,但反对随便写点东西就到处装逼、邀功的,故弄玄虚,好像全世界都要感谢他是的。
最后看看人家cJSON的描述是怎么写的。

An ultra-lightweight, portable, single-file, simple-as-can-be ANSI-C compliant JSON parser, under MIT license
2 回复
wiiiky 2015-4-13 13:53
1
wiiiky 发表于 2015-4-13 10:33 的评论:
一个json解析器还能高性能到哪里去,也是服了。
这么高性能怎么不用C写,要是高性能web服务器还像话。还高性能json解析器,我这里还有高性能hello world。
2
来自 - 广东深圳 的 Chrome/Windows 用户 发表于 2015-4-13 10:49 的评论:
无知无畏啊
那你发表一下你的高见呗?

解析器约只有500行代码。被广泛使用的cJSON只有一个文件,只有700+代码。去GITHUB上找到最少的只要300行代码;而且人家是C语言写的,不仅跑得快而且编译快。一个JSON解析器代码少不是很正常的吗,到这里是一种feature了。

它的性能可与strlen()相比。这就更奇葩了,他们的比法估计是strlen的速度是O(n),然后这个解析器的速度也是O(n),然后他们就可以相比了;但事实上只有n无限大时他们才有可比性,因为strlen是 1n,而解析器是100n(随便编的一个数字,反正比1大很多)。

另外SSE是什么鬼,百度了一下是种硬件指令,难道他们还用了汇编?如果是,那不得不说是吊。

独立,呵呵,和500行一样,没什么可说的。

对内存友好,这很奇葩,预先分配内存,不就是slice,敢情它还内置了一个slice分配器?在其他平台上不清楚,在linux平台上的malloc经过多年优化,速度已经和slice没有区别了。

对unicode友好,我对unicode的解析不是很清楚,不过我知道的是几乎所有json解析器都支持unicode。因为unicode是json标准里就说过的,不支持它就表示没有完全实现json。

但是说了这么多,最重要的是数据;高性能那么得有依据吧,至少和现在主流的json解析器比
4 回复
来自 - 上海 的 Chrome/Windows 用户 2015-4-13 11:23
1
wiiiky 发表于 2015-4-13 10:33 的评论:
一个json解析器还能高性能到哪里去,也是服了。
这么高性能怎么不用C写,要是高性能web服务器还像话。还高性能json解析器,我这里还有高性能hello world。
2
来自 - 广东深圳 的 Chrome/Windows 用户 发表于 2015-4-13 10:49 的评论:
无知无畏啊
确实是无知无畏啊。。
10 回复
来自 - 广东深圳 的 Chrome/Windows 用户 2015-4-13 10:49
1
wiiiky 发表于 2015-4-13 10:33 的评论:
一个json解析器还能高性能到哪里去,也是服了。
这么高性能怎么不用C写,要是高性能web服务器还像话。还高性能json解析器,我这里还有高性能hello world。
无知无畏啊
21 回复
wiiiky 2015-4-13 10:33
一个json解析器还能高性能到哪里去,也是服了。
这么高性能怎么不用C写,要是高性能web服务器还像话。还高性能json解析器,我这里还有高性能hello world。
22 回复

热点评论

wiiiky 2015-4-13 10:33
一个json解析器还能高性能到哪里去,也是服了。
这么高性能怎么不用C写,要是高性能web服务器还像话。还高性能json解析器,我这里还有高性能hello world。
22
来自 - 广东深圳 的 Chrome/Windows 用户 2015-4-13 10:49
无知无畏啊
21
来自 - 上海 的 Chrome/Windows 用户 2015-4-13 11:23
确实是无知无畏啊。。
10
wiiiky 2015-4-14 18:20
我是对腾讯开源个json解析器还这么高调表示不爽,另外json解析器之间速度相差很小,除非真的写的很糟糕,说高性能本来就言过其实。
5
来自 - 北京人民大学 的 Safari/Mac 用户 2015-4-13 17:28
腾讯的repo是fork自miloyip/rapidjson的,fork完就没管了。
4
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。