Gson 与 fastJson 在使用上的差异(fastJson的优点)
一、android 常用的json解析方式
Android 开发上常用的json解析方式有:Gson, fastJson,jackson。
因为jackjson jar包会比较大点(700+k),Gson和fastjson的功能又基本够用,所以一直没正式用过jackjson。自己有用的就是Gson和fastjson
二、基本使用方式
Gson
//解成对象
Fromat mFromat = new Gson().fromJson(jsonStringObject, Fromat.class); //解成对象组
LinkedList<Fromat> list = new LinkedList<MainActivity.Fromat>();
Type type = new TypeToken<LinkedList<Fromat>>(){}.getType();
list = new Gson().fromJson(jsonStringArray, type); //泛型统一封装时 需要传个 type 进来
new TypeToken<LinkedList<Fromat>>(){}.getType();
fromJson(String json, Type typeOfT)
public <T> T fromJson(String json, Type typeOfT)
fastJson
//解析成对象
Fromat fastjsonObject = JSON.parseObject(jsonObjectString, Fromat.class); //解析成对象组
List<Fromat> fastjsonArray = JSON.parseArray(jsonArrayString, Fromat.class); //泛型统一封装时 需要传个 type 进来 或者TypeReference 也可以也是调用的type
new TypeReference<Fromat>() {}
new TypeReference<Fromat>() {}.getType()
public static <T> T parseObject(String input, Type clazz, Feature... features)
public static <T> T parseObject(String text, TypeReference<T> type, Feature... features)
三、fastjson 的优点
可维护性 > 正确性 > 性能
说点实在的,Gson在遇到 {} [] 这种json关键字的时候直接解析为string 报错。fastjson是可以解析
demo代码:
String jsonObjectString = "{\"status\": 0}";
String jsonArrayString = "[{\"status\": 0}]"; //fastJson
String fastjsonObject = JSON.parseObject(jsonObjectString, String.class);
Log.d("test", "fastJson string {} = " + fastjsonObject);
String fastjsonArray = JSON.parseObject(jsonArrayString, String.class);
Log.d("test", "fastJson string [] = " + fastjsonArray); //Gson
try {
String gsonObject = new Gson().fromJson(jsonObjectString, String.class);
Log.d("test", "gson string {} = " + gsonObject);
}catch (Exception e){
Log.d("test", "gson string {} = " + e);
} try {
String gsonArray = new Gson().fromJson(jsonArrayString, String.class);
Log.d("test", "gson string {} = " + gsonArray);
}catch (Exception e){
Log.d("test", "gson string [] = " + e);
}
结果: D/test: fastJson string {} = {“status”:0} D/test: fastJson string [] = [{“status”:0}] D/test: gson string {} = com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: D/test: gson string [] = com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 1 column 2 path $
from: http://www.voidcn.com/blog/lckj686/article/p-6000736.html
Gson 与 fastJson 在使用上的差异(fastJson的优点)的更多相关文章
- 为什么MVC不是一种设计模式? ---比较Backbone和Ext4.x在MVC实现上的差异
为什么MVC不是一种设计模式? ---比较Backbone和Ext4.x在MVC实现上的差异 大漠穷秋 前言 圣人云:不想做妈咪的小姐不是好码农. 每一个码农的心中都有一个终极理想,那就是有一天不用再 ...
- Android ART、Dalvik在multidex上的差异、关联
为提升应用运行性能,谷歌官方从5.0(api level:21)版本开始,将虚拟机运行环境默认为ART, 此处主要研究ART.Dalvik在multidex处理上的差异和关联,做了一个简单的手绘,如下 ...
- O2O 线下业务 和 线上业务,在特征工程上的差异
人工智能在外卖送达时预估上的应用 这篇讲清楚了 O2O 线下业务 和 线上业务,在特征工程上的差异:
- Macos系统编译percona及部分函数在Macos系统上运算差异
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 本文来源:原创投稿 GreatSQL社区原创内容未经授权不得随意使用,转载请联系 ...
- 解决使用Redis时配置 fastjson反序列化报错 com.alibaba.fastjson.JSONException: autoType is not support
1.问题描述 在使用redis时,配置自定义序列化redisTemplate为FastJsonRedisSerializer . 1 /** 2 * 自定义redis序列化器 3 */ 4 @Sup ...
- Java和C++在细节上的差异(转)
Java的基本程序结构.关键字.操作符都和C/C++非常相似,以下为主要的几点区别: 一.基本程序设计结构: Java的基本程序结构.关键字.操作符都和C/C++非常相似,以下为主要的几点区别: 1. ...
- MySQL Transaction--MySQL与SQL Server在可重复读事务隔离级别上的差异
MySQL和SQL Server两种数据库在REPEATABLE-READ事务隔离级别实现方式不同,导致使用上也存在差异. 在MySQL中,默认使用REPEATABLE-READ事务隔离级别,MySQ ...
- 【转载】Java与C++语言在作用域上的差异浅析
http://developer.51cto.com/art/200906/126199.htm 差异一:变量作用域的不同 如下面这段程序代码是符合C++语言的语法要求的.其可以在C语言下正常运行.但 ...
- ASP.NET CORE Linux发布工具(文件对比 只上传差异文件;自动启停WebServer命令;上传完成自动预热WebServer)
最近这几日在搞一个小网站:教你啊 :(感兴趣的朋友可以来捧场,在这个网站上有任何消费我都可以退还) 由于更新频繁,手动更新特别麻烦,于是开发了这个小工具 用了一段时间,还是挺顺手的,同时.NET Co ...
随机推荐
- POJ 2456 3258 3273 3104 3045(二分搜索-最大化最小值)
POJ 2456 题意 农夫约翰有N间牛舍排在一条直线上,第i号牛舍在xi的位置,其中有C头牛对牛舍不满意,因此经常相互攻击.需要将这C头牛放在离其他牛尽可能远的牛舍,也就是求最大化最近两头牛之间的距 ...
- BZOJ1090 [SCOI2003]字符串折叠 区间动态规划 字符串
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1090 题意概括 折叠的定义如下: 1. 一个字符串可以看成它自身的折叠.记作S 2. X(S)是X ...
- What Are You Talking About HDU1075
一开始我也想用map 但是处理不好其他字符.. 看了题解 多多学习! 很巧妙 就是粗暴的一个字符一个字符的来 分为小写字母和非小写字母两个部分 一但单词结束的时候就开始判断. #includ ...
- 【Java】 剑指offer(20) 表示数值的字符串
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如, ...
- Redis中的key的通用操作
1.看看所有的key 2.查看以mys开头的key 3.是否存在 4.删除 5.重命名. 6.设置过期时间与所剩的时间 如果没有设置,返回-1. 7.返回类型
- 031 分布式中,zookeeper的部署
一:准备 1.概述 为分布式应用提供协调服务的项目 提供一个简单的原语集合,以便于分布式应用可以在它之上构建更高层次的同步服务. 类似于文件系统那样的树形数据结构 目的:将分布式服务不再由于协作冲突而 ...
- jax-rs示例
compile 'org.glassfish.jersey.core:jersey-client:2.9.1' @Path("/{appId}/{env}/downloadSDK" ...
- 操作系统概述(os 笔记一)
操作系统概述 操作系统的目标和功能 1.目标:作为用户/计算机接口 计算机的使用人群大致可以分为三类,终端用户,程序开发者,操作系统设计人员. 对于终端用户,即应用程序的用户来说,他们通常不关注计 ...
- 9,EasyNetQ-版本化消息
要启用对版本化消息的支持,您需要确保配置所需的组件. 最简单的方法是: var bus = RabbitHutch.CreateBus( "host=localhost", ser ...
- 5210: 最大连通子块和 动态DP 树链剖分
国际惯例的题面:这题......最大连通子块和显然可以DP,加上修改显然就是动态DP了......考虑正常情况下怎么DP:我们令a[i]表示选择i及i的子树中的一些点,最大连通子块和;b[i]表示在i ...