❏ 站外平台:

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

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

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

An ultra-lightweight, portable, single-file, simple-as-can-be ANSI-C compliant JSON parser, under MIT license
来自 - 北京 的 Chrome/Mac 用户 2015-04-14 17:57 7 回复
RapidJSON的文档中有专门一节是《性能》
来自 - 北京人民大学 的 Safari/Mac 用户 2015-04-13 17:28 11 回复
腾讯的repo是fork自miloyip/rapidjson的,fork完就没管了。
[1]
wiiiky 发表于 2015-04-13 10:33 的评论:
一个json解析器还能高性能到哪里去,也是服了。
这么高性能怎么不用C写,要是高性能web服务器还像话。还高性能json解析器,我这里还有高性能hello world。
[2]
来自 - 广东深圳 的 Chrome/Windows 用户 发表于 2015-04-13 10:49 的评论:
无知无畏啊
[3]
wiiiky 发表于 2015-04-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解析器比
linux 2015-04-13 15:19 6 回复
认真理智的分析,赞一个。确如所言,show me your score.
[1]
wiiiky 发表于 2015-04-13 10:33 的评论:
一个json解析器还能高性能到哪里去,也是服了。
这么高性能怎么不用C写,要是高性能web服务器还像话。还高性能json解析器,我这里还有高性能hello world。
[2]
来自 - 广东深圳 的 Chrome/Windows 用户 发表于 2015-04-13 10:49 的评论:
无知无畏啊
来自 - 上海 的 Chrome/Windows 用户 2015-04-13 11:23 16 回复
确实是无知无畏啊。。

返回顶部

分享到微信

打开微信,点击顶部的“╋”,
使用“扫一扫”将网页分享至微信。