• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Json解析工具的选择,Json解析工具选择

Json解析工具的选择,Json解析工具选择

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了json解析工具,json解析工具下载,json解析工具类,json在线解析工具,android json解析工具等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Json解析工具的选择,Json解析工具选择


前言

前段时间@寒江不钓同学针对国内Top500和Google Play Top200 Android应用做了全面的分析(具体分析报告见文末的参考资料),其中有涉及到对主流应用使用json框架Gson、FastJson、Jackson的统计,具体情况如下:


可见无论是在国内还是国际上,有很多应用会用到json框架,其中谷歌提供的gson框架是被使用得最多的,老牌json框架Jackson属于小众,阿里出品的FastJson在国内的使用情况仅次于Gson,但在国际上却基本没有APP在使用。 (前言摘自https://zhuanlan.zhihu.com/p/21919300)     被使用得最多并不代表就一定是最优方案,在使用json框架的过程中,我们最关注的应该是效率和易用性的问题。由于本人对Jackson不太熟悉,Jackson也比较小众,而且Jackson依赖包是三个中最大的,效率优势不明显,所以 我首先排除了Jackson。   1.Google的Gson(框架描述摘自http://www.cnblogs.com/kunpengit/p/4001680.html)
Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,
但自从在2008年五月公开发布第一版后已被许多公司或用户应用。
Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。
而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。
类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。
Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。
2.阿里巴巴的FastJson
Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。
无依赖,不需要例外额外的jar,能够直接跑在JDK上。
FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。
FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。   Gson、FastJson到底哪一个效率更高,速度更快?(效率比较摘自http://blog.csdn.net/zml_2015/article/details/52165317)   来个单元测试:   循环50次再求平均值:

@org.junit.Test
public void TestSpeed() throws Exception {

List<Foods> foods = foodDao.selectAll(Foods.class);

System.out.println("-------------gson-----------");
long gsonStart = System.currentTimeMillis();
gsonC(foods);//用Gson进行拆包 和 解析 并循环操作50次
long gsonEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (gsonEnd - gsonStart) / 50);
System.out.println("-------------gson-----------");

System.out.println("-------------FastJson-----------");
long fastStart = System.currentTimeMillis();
fastJsonC(foods);// 用FastJson进行拆包 和 解析 并循环操作50次
long fastEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (fastEnd - fastStart) / 50);
System.out.println("-------------FastJson-----------");

System.out.println("-------------JSON-----------");
long jsonStart = System.currentTimeMillis();
jsonC(foods);// 用org.json进行拆包 和 解析 并循环操作50次
long jsonEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (jsonEnd - jsonStart) / 50);
System.out.println("-------------JSON-----------");

}

 

调用的方法必须是 synchronized 同步的,即运行完该方法后才执行下面的代码


private synchronized void jsonC(List<Foods> foods) throws Exception {
for (int j = 0; j < 50; j++) {
String jsonString = JsonTools.createJsonString("json", foods);
JSONObject object = new JSONObject(jsonString);
JSONArray array = object.getJSONArray("json");
List<Foods> list2 = new ArrayList<Foods>();
for (int i = 0; i < array.length(); i++) {

JSONObject foodObject = (JSONObject) array.get(i);
Foods foods2 = new Foods(foodObject.getInt("id"),
foodObject.getString("cookclass"),
foodObject.getString("name"),
foodObject.getString("description"),
foodObject.getString("food"),
foodObject.getString("img"),
foodObject.getString("images"),
foodObject.getString("keywords"),
foodObject.getString("message"),
foodObject.getString("url"));
list2.add(foods2);
}
String s3 = list2.toString();
}
}

private synchronized void fastJsonC(List<Foods> foods) {
for (int i = 0; i < 50; i++) {
String fastString = FastJsonTools.createJsonString(foods);
String s2 = FastJsonTools.createJsonToListBean(fastString,
Foods.class).toString();
}
}

private synchronized void gsonC(List<Foods> foods) {
for (int i = 0; i < 50; i++) {
String gsonString = GsonTools.createJsonString(foods);
String s1 = GsonTools.StringTolist(gsonString, Foods[].class)
.toString();
}
}

然后贴一下解析1万条数据、2万条数据和100条数据各个类库所用的的平均时间(这个时间不包括查询数据库所用的时间) 1.1万 

 

2. 2万 

 

3.100条 

 

经过这次测试之后,确实验证了阿里巴巴的FastJson相对来说是挺快的。因为fastjson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,所以我决定还是fastjson和gson并用,

不要求效率的话就用gson,要求高效率的话就用fastjson。

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Json解析工具的选择,Json解析工具选择

相关文章

  • 2017-05-26Linux内核系列—8.操作系统开发之时钟中断,linux内核
  • 2017-05-26Android中使用开源框架android-image-indicator实现图片轮播部署,
  • 2017-05-26MotionEvent机制(触屏),motionevent机制
  • 2017-05-26android历史
  • 2017-05-26android studio快捷键,androidstudio
  • 2017-05-26学习笔记:下拉刷新的视图和图标的旋转,学习笔记视图
  • 2017-05-26Oracle监听与tnsnames文件标准配置解决监听无法连接问题
  • 2017-05-26手机安全卫士——主界面的开发,安全卫士主界面
  • 2017-05-26PHP的readfile下载大文件时卡住
  • 2017-05-26【Android开发】完美解决Android完全退出程序,开发android

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • android 完全解析模拟遥控器按键,android遥控器
    • 如何「偷」Android 的内存?,「偷」android
    • 安卓第十一天笔记-Intent与inter-filter配置,intentfilter
    • 基于docker安装gitlab
    • Android—自定义控件实现ListView下拉刷新,androidlistview
    • 4.1.2 Activity初窥门径
    • 6.1 数据存储与访问之——文件存储读写
    • xshell可以ping通但是不能远程服务器,putty可以远程
    • android http同步请求,android同步请求
    • android:eclipse看着很舒服的字体和启动速度很快android模拟器

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有