通过各种代码库,可以在Hadoop或Spark集群中使用,方便基于微服务和分布式架构的数据处理应用程序传输和解析不同类型和大小的文件。但是,并非所有JSON库都以相同的方式执行操作。在高吞吐量的环境下,一旦出现快速的、连续的、大量的小文件,它们的解析速度就会有巨大的差异。可见,为你的应用环境选择合适的代码库往往是至关重要的。为此,我准备了一系列的基准测试,将与大家一起探讨四个最流行的JavaJSON库——JSON.simple、GSON、Jackson和JSONP解析不同文件大小的速度。您可以做出明智的选择。四大JSON库介绍由于这四大代码库在Java环境的JSON处理过程中经常被广泛使用,所以我们将根据在Github项目中的流行程度一一介绍:JSON.simplebyYidongFang:是的用于编码和解码JSON文本的类Java工具包。它的目标是成为一个简单、轻量级和快速运行的代码库。Google的GSON:它是一个Java代码库,可以转换Java对象和JSON格式。对Java泛型的完全支持消除了对类进行注释的需要并简化了对特权源代码的访问。FasterXML的Jackson项目:是一组带有流式JSON解析器和生成器库的处理工具。虽然它是为Java设计的,但它可以处理其他非JSON类编码。根据Github使用调查的结果,它是目前最流行的JSON解析器之一。Oracle的JSONP:JSONProcessing通过消费和生成流式JSON文本,以JavaAPI的形式提供JSON处理。属于开源参考JSR353的实现。Benchmark:2017我们根据不同文件大小的处理需求,在不同的库环境下测试解析了不同大小的文件。一般来说,我们将基准测试分为两个关键场景:从https://github.com/zeMirco/sf-city-lots-json中取出一个190MB的大文件并测试其解析速度。从http://www.json-generator.com/随机生成一个1KB的小文件,测试其解析速度。我们让每个库在每个文件上运行10次,无论大小。其中,对于大文件,每个库每次运行都会运行10次迭代;对于小文件,它们每个将运行10,000次迭代。并且在小文件的测试中,我们不会在迭代之间将文件保存在内存中,而是直接在AWS上的c3.large实例上运行测试。下图完整展示了一个大文件的解析结果。为了节省空间,我对小文件的解析结果进行了平均。如果您想查看扩展的结果,请参阅--https://docs.google.com/spreadsheets/d/1iOSAkqRwGGbLHRkcKSyHwpOWYdSrkuQKyUIZ6ef7N-I/edit?usp=sharing。如果您想查看小文件或库的源代码,请查看--https://github.com/terencetaih/aws-speed。大文件结果:2017从上表可以看出,Jackson或JSON.simple处理大文件的时间最少,总体上Jackson会领先于JSON.simple。通过查看所有测试的平均运行结果可以看出,Jackson和JSON.simple遥遥领先,JSONP排名第三,GSON排名最后。接下来我们以Jackson为基准,用百分比表示各个JSON库的解析速度:小文件结果:2017上表是每个文件运行10次的平均值,最下面一行是总平均值。每个库获取的文件数为:GSON-14JSONP-5Jackson-1JSON.simple-0从所有文件的平均测试结果来看:GSON是其中的赢家。尽管在任何单个文件上都不是最快的,但JSON.simple总体排名第二。尽管在少数文件上速度最快,但JSONP仍然排名第三。尽管Jackson在所有文件解析中表现非常一致,但与其他三个库相比,Jackson是最慢的。我们也以GSON为基准,用百分比来表示各个JSON库的解析速度:结语:解析速度虽然不是2017年选择JSON库的唯一考虑因素,但确实是一个重要的参考指标。在运行上述基准测试时,我们发现没有一个库可以在所有文件大小和所有解析速度方面击败其他库。在解析大文件时表现最佳的库在解析小文件时可能表现不佳,反之亦然。因此,我们可以参考以下环境特点,根据各自的解析速度优势选择合适的JSON库。如果您的环境需要频繁或主要处理大型JSON文件,那么Jackson可以成为您的首选库,而GSON则无法处理如此大的文件。如果你的环境主要处理大量的小JSON请求,比如你需要在微服务或分布式架构中做各种设置,那么GSON可以是你的首选库,而Jackson在处理小文件时会吃力。如果您的环境必须定期处理不同大小的文件,JSON.simple可能是自JSON以来适用于可变环境的有用工具。性能在尺寸上有利有弊)。无论如何,JSONP相对于其他三个JSON库来说,对于各种文件的解析速度表现较差,所以不是很推荐。当然,据报道Java9获得了JSON的原生实现,因此我们可以期待它在参考实现的基础上有所改进。基准测试:2021下面,我们将使用最新的JSON库并在Java11上再次运行相同的基准测试。总体而言,它们将比我们之前运行的基准测试表现出显着的性能提升。大文件结果:2021如上表所示,这一轮基准测试的获胜者是GSON,其次是JSONP,其次是Jackson,最后是JSON.simple。那么,我们以GSON为基准,用百分比来表示各个JSON库的解析速度:小文件结果:2021上表是小文件的测试结果。Gson再次以明显的速度优势击败其他三个JSON库,蝉联冠军。随后是JSONP,然后是JSON.simple,最后是Jackson。从表中可以看出,Gson处理这些文件比第二名快了近200毫秒。结语:通过以上2021年的两类测试对比,不难发现无论是Java本身,还是各种JSON库,在速度上都有不小的提升。其中,GSON的进步最为明显,终于可以在大文件和小文件两种基准测试中脱颖而出。原标题:TheUltimateJSONLibrary:JSON.simplevs.GSONvs.Jacksonvs.JSONP,作者:NickAndrews
