当前位置: 首页 > 科技观察

JSON库性能对比:JSON.simpleVSGSONVSJacksonVSJSONP

时间:2023-03-12 22:59:01 科技观察

Java中哪个JSON库解析速度最快?JSON已经成为服务器和WEB应用程序之间数据传输的公认标准,但是正如许多我们认为理所当然的事情一样,你认为理所当然而不再去想它。我们很少考虑我们使用的JSON库之间的区别,但实际上它们是。所以我们运行了一个基准测试来测试几个常用的JSON库,看看哪个在解析不同大小的文件时最快。我将在下面与您分享结果。JSON通常用于传输和解析大文件。对于在Hadoop或Spark集群上运行的数据处理程序,这是一个非常常见的场景。对于给定的文件大小,您可以看到不同库之间的解析速度存在明显差异。在高吞吐量的情况下,小文件会被频繁传输和解析,所以性能差距一开始可能并不明显。但是,如果您需要在非常高的负载下频繁解析大量小文件,差距就会开始扩大。微服务和分布式架构通常使用JSON来传输此类文件,因为这已经是WebAPI的事实标准。并非所有JSON库都称为“Trunco??”。如何根据使用场景选择正确的库非常重要。希望这个基准可以帮助你。JSON库JSON.simplevsGSONvsJacksonvsJSONP我们选择了四个主流的JSON库进行基准测试:JSON.simple、GSON、Jackson和JSONP。Java中的JSON解析通常使用这些库,之所以选择它们是因为它们在Github项目中出现的频率很高。这是我们测试的JSON库:YidongFang的JSON.simple。JSON.simple是一个用于JSON编码和解码的Java实用程序库。它旨在创建一个轻量级、简单和高性能的工具库。谷歌的GSON。GSON是一个Java库,可以在Java对象和JSON之间进行转换。同时,它还提供了对Java泛型的完整支持,不需要你给类添加注解。不加注解使用起来更方便,也是无法修改源码时的必要前提。FasterXML的Jackson项目。Jackson是一个用于数据处理的工具套件,它的亮点是一个流式JSON解析器和生成器。它专为Java设计,但也可以处理其他非JSON编码。从我们在Github中的统计数据来看,它应该是最好的JSON解析器。Oracle的JSONP。JSONP(JSONProcessing)是一组用于JSON处理的JavaAPI。从名字上看,它是用来生成和解析JSON字符串的。这是JSR353规范的开源实现。基准测试我们使用大文件和小文件对这些库进行了基准测试。随着文件大小的变化,处理这些文本所需的系统资源也会增加。该基准测试主要关注两个关键场景:大文件(190MB)的解析速度和小文件(1KB)的解析速度。大文件取自此处。小文件是从这里随机生成的。不管是大文件还是小文件,我们都会用同一个库重复运行10次。对于每个大文件,我们使用同一个库运行10次单独的运行。而对于小文件,它在单个库的单次运行中重复10,000次。在小文件测试的每次迭代中,文件内容都不驻留在内存中,测试在AWS的c3.large实例上运行。下面是大文件的完整测试结果,我对小文件的结果进行了平均。大文件的结果差别很大!Jackson和JSON.simple在这轮测试中领先,Jackson整体上略好于JSON.simple。从测试运行的平均结果来看,Jackson和JSON.simple在大文件上表现更好,而JSONP远远落后于第三名,而GSON则远远落后。让我们再次将结果转换为百分比。杰克逊平均获胜。下面是结果的百分比数据,可以从两个维度来比较:不同库之间的性能差异确实不小。判决:杰克逊以微弱优势获胜。JSON.simple紧随其后,而其余两个库则远远落后。小文件结果上表记录了每个文件解析10次的平均时间,总的平均时间如下图。每个库赢得小文件测试的次数如下:GSON-14JSONP-5Jackson-1JSON.simple-0这个结果看起来很有说服力。不过从所有文件的平均成绩来看,GSON依然是当之无愧的冠军,JSON.simple与JSONP的较量应该是没有悬念的。杰克逊本轮最后一名。尽管JSON.simple没有在任何文件上名列前茅,但它在解析速度方面总体排名第二。另一方面,JSONP虽然在多个档次中夺冠,但平均只拿到了第三名。还值得注意的是,尽管Jackson是这一轮中最慢的库,但它在所有文件中的表现都非常一致。其他三个库,虽然有时比Jackson快得多,但没有解析其他文件。速度相当甚至更差。让我们将这些数字转换成百分比,看看同样的两个维度:与大文件测试相比,这次的差距相对较小,但仍然不容忽视。结论:遗憾的是JSON.simple以微弱的劣势无缘冠军,本轮GSON获胜。JSONP仍然是千禧年的第三名,这次杰克逊有一个迟到的插曲。总结解析速度不是一个JSON库的唯一指标,但却非常重要。通过运行这个基准测试,我们发现没有一个库能在所有文件上击败竞争对手。在大文件上表现良好的方法在小文件上失败,反之亦然。如果要从解析速度的角度来选择哪个库,那就要看你的使用场景了。如果您的应用程序经常处理大型JSON文件,那么Jackson应该适合您。GSON在处理大文件时遇到了一些困难。如果你主要处理小文件请求,比如微服务或者分布式架构的初始化,那么GSON应该是最好的。杰克逊在小档上的表现并不尽如人意。如果您经常处理这两种类型的文件,那么在两轮性能中均排名第二的JSON.simple更适合此类场景。Jackson和GSON在不同的文件大小下都表现不佳。除非解析速度不是问题,否则JSONP绝对没有什么可称赞的。与其他库相比,它在大文件和小文件上的表现都很差。幸运的是,Java9很快就会有原生的JSON实现。相信JSONP未来的表现还是值得期待的。终于完成了。如果对JSON库的解析速度比较敏感,大文件选择Jackson,小文件选择GSON,两者都选择JSON.simple。如果您对此基准有任何疑问,请在下面发表评论。