首先 转载自http://www.cnblogs.com/androidsuperman/p/4579249.html 感谢 @西北野狼 同学。
第一部分: GsonFormat 插件基本使用方法
很久以前写json解析用原始的解析json的方法,后来为了加快开发进度,开始使用gson,fastjson等第三方jar包来进行json解析,为了保持apk足够小,不因为引入jar包导致apk文件过大,选择使用gson来加速json解析,当然,去年androidstudio 1.0版本出来,很多人开始使用androidstudio,当然studio有很多方便开发的插件加速应用的开发,减少开发者的劳动力。
今天推荐个工具就是:gsonformat
下载地址:
https://github.com/zzz40500/GsonFormat
用过后表示,怎么这么酸爽的呢,哈哈
安装流程:
Setting-->plugins-->
使用:
自定义个javaBean(无任何内容,就一个空的类)
首先复制你要解析的json
然后alt+insert弹出如下界面
粘贴到如下界面:
点击ok,自动生成对应javaBean的语句:
然后就是根据json来进行json to bean的转换了
提供两工具类:
-
1 import java.util.List; 2 /** 3 * TODO: json工具类 4 * 5 * @author soyoungboy 6 * @date 2014-11-8 下午2:32:24 7 */ 8 public abstract class Json { 9 private static Json json; 10 Json() { 11 } 12 public static Json get() { 13 if (json == null) { 14 json = new GsonImpl(); 15 } 16 return json; 17 } 18 public abstract String toJson(Object src); 19 public abstract <T> T toObject(String json, Class<T> claxx); 20 public abstract <T> T toObject(byte[] bytes, Class<T> claxx); 21 public abstract <T> List<T> toList(String json, Class<T> claxx); 22 }
1 public class GsonImpl extends Json { 2 private Gson gson = new Gson(); 3 @Override 4 public String toJson(Object src) { 5 return gson.toJson(src); 6 } 7 @Override 8 public <T> T toObject(String json, Class<T> claxx) { 9 return gson.fromJson(json, claxx); 10 } 11 @Override 12 public <T> T toObject(byte[] bytes, Class<T> claxx) { 13 return gson.fromJson(new String(bytes), claxx); 14 } 15 @Override 16 public <T> List<T> toList(String json, Class<T> claxx) { 17 Type type = new TypeToken<ArrayList<T>>() {}.getType(); 18 List<T> list = gson.fromJson(json, type); 19 return list; 20 } 21 }
然后就是一句话,完美解析json了:
- 1 JavaBean bean =GsonImpl.get().toObject(json,JavaBean.class);
完美解析json就是这么简单,就是这么酸爽。
解析json的工具类来自lite君的github的轮子代码。
https://github.com/litesuits/android-lite-http/tree/master/library/src/com/litesuits/http/data
第二部分:使用GsonFormat 解析 和风天气接口数据
和风天气:http://www.heweather.com/ 每日3000次访问量,对我们业余爱好者足够了,拿来做个天气预报DEMO不错。
首先是从和风天气获得的天气数据,Jason 格式, 放到 jason.parse.online.fr上看是这样的:
但是!!!!! 按照第一部分的方法,个Jason 数据复制进去,点OK 你会发现它提示 Parse err! 为什么了,因为这个和风天气奇葩的Jason数据,第一个KEY是 "HeWeather data service 3.0" ,,这里的 空格、“.”都是不合法的,导致它解析不出对应得实体类。 那怎么办了?
首先,解析的时候直接 把接口方法的Jason数据(上图左边部分) 的第一行,第一个KEY,也就是 "HeWeather data service 3.0" 替换成 "HeWeatherdataservice",去掉空格以及3.0, 复制进GsonFormat插件的粘贴板,点击OK,你会发现解析成功了。
然后,把网页返回的Json原始数据也做上述 处理,再解析。 实体类 和 要解析的数据当然要保持一致对吧~
这里我用了 StringBulder的 deleteCharAt 方法,按照字符串的下标把空格和 “3.0”去掉了,,然后, 用第一张说的一行代码,Json解析搞定~~~ 调试看我的weatherBean 这个对象里,数据都已经乖乖的在那里了!!
总结:搞了我好半天,这个格式不规范的Jason数据,不过也算找到了 处理方法,接口得到的Jason数据要是不规范,可以先自己处理成规范的格式,,用JasonFormat插件进行解析,然后程序里在HTTP方式获取到Jason String后,也用代码处理成一样的格式。 这样,实体类和Jason String对应起来,格式一致。 接下来,就是一行代码搞定的事了 。。。。。是不是 从此Json 解析都能2分钟搞定呢???~~~ 喜欢请点赞!