全世界最快的 JSON 解析器 - 比别的快 10x

2016 年 12 月 12 日
 taowen

jsoniter ( json-iterator )是一款快且灵活的 JSON 解析器,同时提供 JavaGo 两个版本

Java 版本跑分

Go 版本跑分

19036 次点击
所在节点    分享创造
34 条回复
majinjing3
2016 年 12 月 12 日
支持,建议加到 awesome-go 里面哈,
crytis
2016 年 12 月 12 日
矮油,你这测试的,为啥 fastjson 比 jackson 慢?跟阿里的测试不符啊,还有,能差这么多性能?
taowen
2016 年 12 月 12 日
@crytis https://github.com/fabienrenaud/java-json-benchmark 我从这里 fork 的。别人测的也是这个结果。 fastjson 就是不快啊。
a3mao
2016 年 12 月 12 日
能否说说是怎么实现的?为啥会这么快?
taowen
2016 年 12 月 12 日
irgil
2016 年 12 月 12 日
taowen
2016 年 12 月 12 日
@irgil 这个是代码生成的。鉴于这么多人反馈,我还是缩进一下吧
0915240
2016 年 12 月 12 日
比其他的快这么多吗?
taowen
2016 年 12 月 12 日
@0915240 自测的结果。欢迎第三方验证。我觉得也有点诡异。
zcbenz
2016 年 12 月 12 日
和 rapidjson 相比如何?速度的差异有可能是实现不完全,或者测试案例有特例, rapidjson 的作者有一供一套完整的 benchmark 。

https://github.com/miloyip/rapidjson
https://github.com/miloyip/nativejson-benchmark
slixurd
2016 年 12 月 12 日
我改了一下你的 ComplexObject
public class ComplexObject {
--public int field1;
--public List<List<Integer>> field2;
--public Any field3;
}
然后再解析一下 String json = "{'field1': 100, 'field2': [[1,2],[2]]}".replace('\'', '"');
GG 了...你的 TypeLiteral 实现有点问题,没法保存这种复杂结构
fastjson 没有问题
ComplexObject object = JSON.parseObject(json,new TypeReference<ComplexObject>(){});
sfqtsh
2016 年 12 月 12 日
C/C++写的不必你这快 10 倍- O -
taowen
2016 年 12 月 12 日
@zcbenz 如果和 c++比的话,怎样的测试才算公平?
taowen
2016 年 12 月 12 日
@zcbenz string 是 std 呢还是 fb 呢还是 qstring 呢。性能差别大了去了。
zcbenz
2016 年 12 月 12 日
@taowen 顾左右而言他。
taowen
2016 年 12 月 12 日
@zcbenz 代码写出来用的。 rapidjson 再快也没办法用来反序列化 java 对象,比较有何意义呢。 java 多了一次堆外缓存到堆内对象的拷贝,肯定比 c++慢啊。 c++可以直接 mmap 成 bytes ,然后直接 cast 成内存对象来用。
taowen
2016 年 12 月 12 日
@slixurd 刚刚改了一下代码,现在支持了。
ipwx
2016 年 12 月 12 日
你这代码不能防御错误的 JSON 文件。现在是硬件过剩而软件复杂度超过任何人能处理的时代,宁可用大部分性能去防御错误输入,也不要假定输入是对的。显式报错永远比静默忽略要重要。
ipwx
2016 年 12 月 12 日
毕竟静默报错可能会把错误累积到系统其他不知道哪里的地方,这时候查错的成本实在是大得惊人。更别说恶意攻击的情况了。
taowen
2016 年 12 月 13 日
@ipwx point taken, thanks. 这个世界还是需要多样性的。虽然所有的现代语言都支持了数组越界检查,但是仍然有人觉得自己需要裸奔。作死是挡不住的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/327154

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX