OpenHarmony啃论文成长计划——几种常见的JSON解析器比较(下篇)(转载)
作者简介
HagonChan,陈汉武,来自深圳技术大学的大二学生。目前在学校FSR实验室学习OpenHarmony及HarmonyOS北向应用开发、web以及小程序前端开发以及区块链智能合约开发,具有小程序开发经验。从上一个寒假开始正式投入到鸿蒙系统的学习中,后续仍会持续投入精力继续深入学习。目前正在参加OpenHarmony“啃论文”的成长计划,并输出过学习博客,得到广大开发者的好评。FFH是FSRlab For Harmony的首字母缩写。
引言
上一篇文章简单地讲了为什么XML会逐渐被JSON取代,接下来这篇文章,我们来看一下国外几种常见JSON解析器的比较,分别是Gson,AndroidJson,JSON.simple,JSON.smart, Jackson。以下分析大部分来自参考文献,该参考文献论文主要讨论在Android操作系统上不同解析器处理移动设备JSON格式的问题。
Gson
第一种解析方法称为Gson,来自com.google.gson.stream.JsonReaderpackage,是由Google团队为Java开发的,是一款开源的 Java 库,主要用途为序列化 Java 对象为 JSON 字符串,或反序列化 JSON 字符串成 Java 对象。
AndroidJson
第二种方法称为AndroidJson,使用谷歌直接提供的解析库,是Android SDK的一部分。与其他方法不同,无需将其他库编译到最终应用程序中。然而缺点是在与服务器建立通信时,下载的数据位于InputStream类对象中,这一步需要将数据转换为字符串类对象。因此对于大数据量的解析,性能要求会很高。
JSON.simple
JSON.simple用的是JSON.simple库,是基于堆的方法解析数据的。
JSON.smart
JSON.smart从代码结构上看和JSON.simple很相似,JSON.smart 接口与JSON.simple 几乎相同,因此从 JSON.simple 迁移到JSON.smart 非常容易。不同的是,JSON.smart是以性能为驱动。JSON.smart 比JSON.simple至少快两倍。
Jackson
Jackson用的是Jackson JSON Processor库。Jackson 是当前用的比较广泛的,用来序列化和反序列化JSON的 Java 的开源框架。Jackson 社区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看,Jackson 是最流行的 JSON解析器之一 。Jackson 优点很多。Jackson 所依赖的 jar 包较少 ,简单易用。与其他 Java 的 JSON 的框架 Gson 等相比, Jackson 解析大的JSON 文件速度比较快;Jackson 运行时占用内存比较低,性能比较好;Jackson 有灵活的 API,可以很容易进行扩展和定制。
场景介绍
该场景在不同的安卓设备上分别对10, 50, 100, 200, 500, 1000 和 5000 量级的空间数据进行解析,以下图表的X轴是数据量,Y轴是不同解析库消耗的时间. Graph1-3提供了在单个设备上解析所需的测量时间。所有值均以毫秒为单位提供。对每个设备进行十次适当的测量,然后从测量值中获得平均值。
结论:
在图表上测试的数据来看,很明显,对于大型数据解析,使用Jackson 是最有利的方法。但是这种方法不适用于小型数据的解析,小型的数据量选择Gson性能可能会更佳。
fastJson和Jackson
这里我也想提一下国内阿里大神温少凭一己之力撑起的fastJson,这个库以“快”出名,在国内有人使用,但是在国外大部分项目依然选择Jackson,这又是为什么呢?
因为只有fastJson一个人负责,而像Jackson这些库是由一个团队负责的,所以一个人的团队开发的库可以比一个团队开发的还有性能优势,可以想到是走了些捷径,这些捷径就是在fastJson中写死了一些代码,导致扩展性不高,牺牲了Java某些应该兼容的特性,以达到了所谓的快,其代码质量相较国外的库是比较差的。
所以fastJson之所以没在国际上流行起来,最主要的原因应该是开发者的思路全放到快上去了,而偏离了标准及功能性,质量也不够好,有点“舍本逐末”的味道,并且没有英文文档,这样就更没法指望老外用了。
而Jackson的拓展性很高。各种奇葩需求都能得到满足,开源代码质量也比较高,开源项目社区的运营也比较好。
全文缩略语汇总
缩写 | 英文 | 中文 |
RPC | Remote Procedure Call | 远程过程调用 |
HTTP | HyperText Transfer Protocol | 超文本传输协议 |
TCP | Transmission Control Protocol | 传输控制协议 |
UDP | User Datagram Protocol | 用户数据报协议 |
URI | Uniform Resource Identifier | 统一资源标志符 |
JSON | JavaScript Object Notation | |
PHP | Hypertext Preprocessor | 超文本预处理器 |
SOA | Service-Oriented Architecture | 面向服务架构 |
NIO | Non-blocking Input Output | 非阻塞式的输入和输出 |
FA | Feature Ability | 特性能力 |
HTML | HyperText Markup Language | 超文本标记语言 |
XML | EXtensible Markup Language | 可扩展标记语言 |
SDK | Software development kit | 软件开发套件 |
前期回顾
OpenHarmony啃论文成长计划—JSON-RPC(上篇)
OpenHarmony啃论文成长计划—为什么JSON将逐渐取代XML?(中篇)
参考文献
[1] Spatial Data Monitoring and Mobile Applications – Comparison of Methods
for Parsing JSON in Android Operating System
https://www.researchgate.net/publication/287622944
写在最后:
OpenHarmony 成长计划—“啃论文俱乐部”(以下简称“啃论文俱乐部”)是在 2022年 1 月 11 日的一次日常活动中诞生的。截至 3 月 31 日,啃论文俱乐部已有 87 名师生和企业导师参与,目前共有十二个技术方向并行探索,每个方向都有专业的技术老师带领同学们通过啃综述论文制定技术地图,按“降龙十八掌”的学习方法编排技术开发内容,并通过专业推广培养高校开发者成为软件技术学术级人才。
啃论文俱乐部的宗旨是希望同学们在开源活动中得到软件技术能力提升、得到技术写作能力提升、得到讲解技术能力提升。大学一年级新生〇门槛参与,已有俱乐部来自多所高校的大一同学写出高居榜首的技术文章。
如今,搜索“啃论文”,人们不禁想到、而且看到的都是我们——OpenHarmony 成长计划—“啃论文俱乐部”的产出。
OpenHarmony开源与开发者成长计划—“啃论文俱乐部”学习资料合集
1)入门资料:啃论文可以有怎样的体验
https://docs.qq.com/slide/DY0RXWElBTVlHaXhi?u=4e311e072cbf4f93968e09c44294987d
2)操作办法:怎么从啃论文到开源提交以及深度技术文章输出https://docs.qq.com/slide/DY05kbGtsYVFmcUhU
3)企业/学校/老师/学生为什么要参与 & 啃论文俱乐部的运营办法https://docs.qq.com/slide/DY2JkS2ZEb2FWckhq
4)往期啃论文俱乐部同学分享会精彩回顾:
同学分享会No1.成长计划啃论文分享会纪要(2022/02/18) https://docs.qq.com/doc/DY2RZZmVNU2hTQlFY
同学分享会No.2 成长计划啃论文分享会纪要(2022/03/11) https://docs.qq.com/doc/DUkJ5c2NRd2FRZkhF
同学们分享会No.3 成长计划啃论文分享会纪要(2022/03/25)
https://docs.qq.com/doc/DUm5pUEF3ck1VcG92?u=4e311e072cbf4f93968e09c44294987d
现在,你是不是也热血沸腾,摩拳擦掌地准备加入这个俱乐部呢?当然欢迎啦!啃论文俱乐部向任何对开源技术感兴趣的大学生开发者敞开大门。
后续,我们会在服务中心公众号陆续分享一些 OpenHarmony 开源与开发者成长计划—“啃论文俱乐部”学习心得体会和总结资料。记得呼朋引伴来看哦。
扫码添加 OpenHarmony 高校小助手,加入“啃论文俱乐部”微信群