Android总结之json解析(FastJson Gson 对比)
前言:
最近为了统一项目中使用的框架,发现项目中用到了两种json解析框架,他们就是当今非常主流的json解析框架:google的Gson 和阿里巴巴的FastJson,为了废除其中一个所以来个性能和使用的大比拼。
FastJson简介:Fastjson是一个Java语言编写的JSON处理器,由阿里巴巴公司开发。
当前版本: fastjson-1.2.14.jar
下载地址http://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.14/
对象转化成json:
/**
* 对象转化为json fastjson 使用方式
*
* @return
*/
public static String objectToJsonForFastJson(Object object) {
if (object == null) {
return "";
}
try {
return JSON.toJSONString(object);
} catch (JSONException e) {
} catch (Exception e) {
}
return "";
}
json转化成对象:
/**
* json转化为对象 fastjson 使用方式
*
* @return
*/
public static <T> T jsonToObjectForFastJson(String jsonData, Class<T> clazz) {
if (TextUtils.isEmpty(jsonData)) {
return null;
}
try {
return parseObject(jsonData, clazz);
} catch (Exception e) {
}
return null;
}
json转化成List:
/**
*json转化为List fastjson 使用方式
*/
public static List jsonToListForFastJson(String jsonData) {
if (TextUtils.isEmpty(jsonData)) {
return null;
}
List arrayList = null;
try {
arrayList = parseObject(jsonData,new TypeReference<ArrayList>(){});
} catch (Exception e) {
}
return arrayList; }
json转化这Map:
/**
*json转化为Map fastjson 使用方式
*/
public static Map jsonToMapForFastJson(String jsonData){
if (TextUtils.isEmpty(jsonData)) {
return null;
}
Map map = null;
try{
map = parseObject(jsonData,new TypeReference<Map>(){});
}catch (Exception e){
e.printStackTrace();
}
return map;
}
Gson 简介:Gson由谷歌研发,可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。
当前版本2.40
使用方式 build.gradle 中配置 compile 'com.google.code.gson:gson:2.4'
对象转化json:
/**
* 对象转化为json对象 Gson 使用方式
*
* @return
*/
public static String objectToJsonForGson(Object object) {
if (object == null) {
return "";
}
Gson gson;
try {
gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
return gson.toJson(object);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
json转化成对象:
/**
* json转化为对象 Gson 使用方式
*
* @return
*/ public static <T> T jsonToObjectForGson(String jsonData, Class<T> clazz) {
if (TextUtils.isEmpty(jsonData)) {
return null;
}
T finalResult = null;
try {
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
finalResult = gson.fromJson(jsonData, clazz);
} catch (Exception e) {
e.printStackTrace();
}
return finalResult;
}
json转化成List:
/**
*json转化为集合 Gson 使用方式
*/
public static List jsonToListForForGson(String jsonData) {
if (TextUtils.isEmpty(jsonData)) {
return null;
}
List list = null;
try {
Type listType = new TypeToken<ArrayList>() {
}.getType();
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
list = gson.fromJson(jsonData, listType);
} catch (Exception e) {
}
return list;
}
json转化为Map:
/**
*json转化为Map fastjson 使用方式
*/
public static Map jsonToMapForForGson(String jsonData){
if (TextUtils.isEmpty(jsonData)) {
return null;
}
Map map = null;
try {
Type listType = new TypeToken<Map>() {
}.getType();
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
map = gson.fromJson(jsonData, listType);
} catch (Exception e) {
}
return map;
}
测试性能程序:
第一步:首先创建一个实体对象Person
public class Person {
private String name;//姓名
private int age;//年龄
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
第二部:创建一个测试集合:
List<Person> personList=new ArrayList<>();
int testMaxCount=1000;//测试的最大数据条数
//添加测试数据
for(int i=0;i<testMaxCount;i++){
Person person =new Person();
person.setAge(i);
person.setName(String.valueOf(i));
personList.add(person);
}
分别执行两者的转化和解析代码:
//FastJson生成json数据
long start=System.currentTimeMillis();
String jsonData=JsonUtils.objectToJsonForFastJson(personList);
long end=System.currentTimeMillis();
Log.e("MainActivity","FastJson生成json数据 cost time---->"+(end-start)); //FastJson解析json数据
start=System.currentTimeMillis();
List<Person> tempPersons=JsonUtils.jsonToListForFastJson(jsonData);
end=System.currentTimeMillis();
Log.e("MainActivity","FastJson解析json数据 cost time---->"+(end-start)); //Gson生成json数据
start=System.currentTimeMillis();
jsonData=JsonUtils.objectToJsonForGson(personList);
end=System.currentTimeMillis();
Log.e("MainActivity","Gson生成json数据 cost time---->"+(end-start)); //Gson解析json数据
start=System.currentTimeMillis();
List<Person> tempPersons1=JsonUtils.jsonToListForForGson(jsonData);
end=System.currentTimeMillis();
Log.e("MainActivity","Gson解析json数据 cost time---->"+(end-start));
重点看执行结果:单位毫秒(执行时间)
两者转换性能对比:1000条 10000条 100000条 200000条
fastJson : 45 289 4010 8396
Gson : 60 724 4071 8803
两者解析性能对比:1000条 10000条 100000条 200000条
fastJson : 55 552 3826 8638
Gson : 45 465 5942 9668
总结:在数据量比较小的情况下,两者性能相差无几,在数据量比较大的情况下FastJson还是有优势的。
插曲:为了项目省事,本人把FastJson给删除了,结果项目中遗留了一些代码编写不规范的情况,比如userId 写成了useid 但是json数据中返回的是userId,之前用FastJson一直正常这才发现原来FastJson对实体属性是忽略大小写的,真是一个神奇的东西。
Android总结之json解析(FastJson Gson 对比)的更多相关文章
- Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例
Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...
- Android总结之json解析(FastJson Gson 对比)[申明:来源于网络]
Android总结之json解析(FastJson Gson 对比)[申明:来源于网络] 地址:http://blog.csdn.net/u014031072/article/details/5392 ...
- json解析jackson ,Gson,等知识总结
相关资料链接: Java构造和解析json数据的两种方法详解 java解析json Android网络之数据分析---使用Google Gson 解析Json数据 使用jackson在java中处理j ...
- Json解析与Gson解析
本文主要介绍json最原始的解析与google提供的gson工具类解析 ①json解析 /** * 普通的json解析 * @param s * @throws JSONException */ pr ...
- android JSON解析 fastjson和gson的使用
User user = new User(); user.setPhone("11111111"); user.setNmae("张三"); user.setP ...
- Android 中的Json解析工具fastjson 、序列化、反序列化
Android中通常需要访问服务器,然而服务器返回的数据很多时候都是Json格式 1.fastjson简介 阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备 ...
- Android开发之json解析
目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...
- JSON解析之Gson
1.Gson简介 Gson是一个将Java对象转为JSON表示的开源类库,由Google提供,并且也可以讲JSON字符串转为对应的Java对象.虽然有一些其他的开源项目也支持将Java对象转为JSON ...
- fastJson Gson对比及java序列化问题
一个案例 POJO没有set方法, 造成反序列化时出现NPE问题.实际场景:POJO是第三方提供的,final public class XJSONTest { public static void ...
随机推荐
- Rust语言的多线程编程
我写这篇短文的时候,正值Rust1.0发布不久,严格来说这是一门兼具C语言的执行效率和Java的开发效率的强大语言,它的所有权机制竟然让你无法写出线程不安全的代码,它是一门可以用来写操作系统的系统级语 ...
- web前端面试题汇总
1.doctype作用 <!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html> 标签之前.告知浏览器的解析器用什么文档标准解析这个文档.DOCTYPE不存在 ...
- 关于C#调用非托管动态库方式的性能疑问
最近的项目中,因为一些原因,需要C#调用非托管(这里为C++)的动态库.网上喜闻乐见的方式是采用静态(DllImport)方式进行调用.偶然在园子里看到可以用动态(LoadLibrary,GetPro ...
- maven整理——初步
最近用到了maven,查找了很多资料,写这篇博文是为了记录maven的使用学习,也方便自己日后好查找. 在这里引用http://www.cnblogs.com/dcba1112/archive/201 ...
- 【Beta】Daily Scrum Meeting总结
团队博客目录:FTD团队博客目录 一.项目预期计划和现实进展 更换网络请求框架为okHttp 完成 补充和完善服务器的API 完成(可与web端互连) 补充和完善app与服务器交互的类和方法 完成 完 ...
- *HDU 1398 母函数
Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- java学习中的一些疑惑解答
一.java中的枚举类型: 在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的.例如星期一到星期日七个数据元素 ...
- 使用Spring JdbcTemplate实现数据库操作
今天我来演示 关于JDBCTemplate实现对数据库的查询和添加 首先是添加 第一步大家都知道 创建一个实体类 然后写一个方法 把实体类当参数传进去 在实现这个接口 JdbcDaoSupport这个 ...
- (转载)H.264码流的RTP封包说明
H.264的NALU,RTP封包说明(转自牛人) 2010-06-30 16:28 H.264 RTP payload 格式 H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) ...
- 非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛
非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛 Glenn Berry 大牛会对这个脚本持续更新 -- SQL Server 2012 Diagnost ...