前言:

最近为了统一项目中使用的框架,发现项目中用到了两种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 对比)的更多相关文章

  1. Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

    Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...

  2. Android总结之json解析(FastJson Gson 对比)[申明:来源于网络]

    Android总结之json解析(FastJson Gson 对比)[申明:来源于网络] 地址:http://blog.csdn.net/u014031072/article/details/5392 ...

  3. json解析jackson ,Gson,等知识总结

    相关资料链接: Java构造和解析json数据的两种方法详解 java解析json Android网络之数据分析---使用Google Gson 解析Json数据 使用jackson在java中处理j ...

  4. Json解析与Gson解析

    本文主要介绍json最原始的解析与google提供的gson工具类解析 ①json解析 /** * 普通的json解析 * @param s * @throws JSONException */ pr ...

  5. android JSON解析 fastjson和gson的使用

    User user = new User(); user.setPhone("11111111"); user.setNmae("张三"); user.setP ...

  6. Android 中的Json解析工具fastjson 、序列化、反序列化

    Android中通常需要访问服务器,然而服务器返回的数据很多时候都是Json格式 1.fastjson简介 阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备 ...

  7. Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

  8. JSON解析之Gson

    1.Gson简介 Gson是一个将Java对象转为JSON表示的开源类库,由Google提供,并且也可以讲JSON字符串转为对应的Java对象.虽然有一些其他的开源项目也支持将Java对象转为JSON ...

  9. fastJson Gson对比及java序列化问题

    一个案例 POJO没有set方法, 造成反序列化时出现NPE问题.实际场景:POJO是第三方提供的,final public class XJSONTest { public static void ...

随机推荐

  1. Flask_more1

    #DB ``` import os basedir = os.path.abspath(os.path.dirname(__file__))   SQLALCHEMY_DATABASE_URI = ' ...

  2. 如何使CEF支持Flash

    方法一:复制Chrome浏览器下的pepperFlash,通过cef命令行参数设置路径. public Form1() { InitializeComponent(); InitializeChrom ...

  3. tornado学习笔记11 Web应用中模板(Template)使用应用实践

    上一篇中(Web应用中模板的工作流程分析),已经分析了模板的渲染流程,以及相关参数获取及设置原理.这篇主要讲述模板在实际应用案例. 11.1 需求 根据用户输入的两次密码,判断两次密码是否一致,并将判 ...

  4. VIM 解决中文乱码

    $ vim ~/.vimrc 加入以下内容 set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936 set termencoding=utf- ...

  5. C#调用win32 api程序实例

    1.声明static extern 方法,使用DllImport特性 class MyClass { [DllImport("kernel32", SetLastError = t ...

  6. linux platform设备与驱动

    struct platform_driver { int (*probe)(struct platform_device *); int (*remove)(struct platform_devic ...

  7. Ubuntu 14.04安装Cinnamon桌面环境

    2014年05月26日 薄荷开源网,mintos,网如其名,自然最关注的还是 Linux Mint 这个 DistroWatch 排名第一的 Linux 发行版.奈何此前的 Linux Mint 17 ...

  8. 【Beta】Daily Scrum Meeting第二次

    1.任务进度 学号 已完成 接下去要做 502 系负责人及所负责专业的表 写出PHP测试的demo:将okHttp的请求放在非UI线程中执行 509 PHP更该用户信息:更新系负责人所负责系:删除任务 ...

  9. .net网站常见问题及解决方案

    1.   解决方法: 三个文件放到项目Bin文件夹     2. 解决方法 : requestValidationMode="2.0" 加到 3. 你在浏览器输入网址报这样的错误 ...

  10. ps 实例部分

    实例篇1:将不同图片通过阀值转换成黑白色人物头像 图像-黑白-曲向-阀值 本图像-复制-粘贴