JSON解析封装相关工具类

  1. public class GsonUtil {
  2. private static Gson gson = null;
  3. static {
  4. if (gson == null) {
  5. gson = new Gson();
  6. }
  7. }
  8. private GsonUtil() {
  9. }
  10. /**
  11. * 转成json
  12. *
  13. * @param object
  14. * @return
  15. */
  16. public static String gsonString(Object object) {
  17. String gsonString = null;
  18. if (gson != null) {
  19. gsonString = gson.toJson(object);
  20. }
  21. return gsonString;
  22. }
  23. /**
  24. * 转成bean
  25. *
  26. * @param gsonString
  27. * @param cls
  28. * @return
  29. */
  30. public static <T> T gsonToBean(String gsonString, Class<T> cls) {
  31. T t = null;
  32. if (gson != null) {
  33. t = gson.fromJson(gsonString, cls);
  34. }
  35. return t;
  36. }
  37. /**
  38. * 转成list
  39. * 泛型在编译期类型被擦除导致报错
  40. * @param gsonString
  41. * @param cls
  42. * @return
  43. */
  44. public static <T> List<T> gsonToList(String gsonString, Class<T> cls) {
  45. List<T> list = null;
  46. if (gson != null) {
  47. list = gson.fromJson(gsonString, new TypeToken<List<T>>() {
  48. }.getType());
  49. }
  50. return list;
  51. }
  52. /**
  53. * 转成list
  54. * 解决泛型问题
  55. * @param json
  56. * @param cls
  57. * @param <T>
  58. * @return
  59. */
  60. public static <T> List<T> jsonToList(String json, Class<T> cls) {
  61. Gson gson = new Gson();
  62. List<T> list = new ArrayList<T>();
  63. JsonArray array = new JsonParser().parse(json).getAsJsonArray();
  64. for(final JsonElement elem : array){
  65. list.add(gson.fromJson(elem, cls));
  66. }
  67. return list;
  68. }
  69. /**
  70. * 转成list中有map的
  71. *
  72. * @param gsonString
  73. * @return
  74. */
  75. public static <T> List<Map<String, T>> gsonToListMaps(String gsonString) {
  76. List<Map<String, T>> list = null;
  77. if (gson != null) {
  78. list = gson.fromJson(gsonString,
  79. new TypeToken<List<Map<String, T>>>() {
  80. }.getType());
  81. }
  82. return list;
  83. }
  84. /**
  85. * 转成map的
  86. *
  87. * @param gsonString
  88. * @return
  89. */
  90. public static <T> Map<String, T> gsonToMaps(String gsonString) {
  91. Map<String, T> map = null;
  92. if (gson != null) {
  93. map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() {
  94. }.getType());
  95. }
  96. return map;
  97. }
  98. // -------
  99. /**
  100. * 按章节点得到相应的内容
  101. * @param jsonString json字符串
  102. * @param note 节点
  103. * @return 节点对应的内容
  104. */
  105. public static String getNoteJsonString(String jsonString,String note){
  106. if(TextUtils.isEmpty(jsonString)){
  107. throw new RuntimeException("json字符串");
  108. }
  109. if(TextUtils.isEmpty(note)){
  110. throw new RuntimeException("note标签不能为空");
  111. }
  112. JsonElement element = new JsonParser().parse(jsonString);
  113. if(element.isJsonNull()){
  114. throw new RuntimeException("得到的jsonElement对象为空");
  115. }
  116. return element.getAsJsonObject().get(note).toString();
  117. }
  118. /**
  119. * 按照节点得到节点内容,然后传化为相对应的bean数组
  120. * @param jsonString 原json字符串
  121. * @param note 节点标签
  122. * @param beanClazz 要转化成的bean class
  123. * @return 返回bean的数组
  124. */
  125. public static <T> List<T> parserJsonToArrayBeans(String jsonString,String note,Class<T> beanClazz){
  126. String noteJsonString = getNoteJsonString(jsonString,note);
  127. return parserJsonToArrayBeans(noteJsonString,beanClazz);
  128. }
  129. /**
  130. * 按照节点得到节点内容,转化为一个数组
  131. * @param jsonString json字符串
  132. * @param beanClazz 集合里存入的数据对象
  133. * @return 含有目标对象的集合
  134. */
  135. public static <T> List<T> parserJsonToArrayBeans(String jsonString,Class<T> beanClazz){
  136. if(TextUtils.isEmpty(jsonString)){
  137. throw new RuntimeException("json字符串为空");
  138. }
  139. JsonElement jsonElement = new JsonParser().parse(jsonString);
  140. if(jsonElement.isJsonNull()){
  141. throw new RuntimeException("得到的jsonElement对象为空");
  142. }
  143. if(!jsonElement.isJsonArray()){
  144. throw new RuntimeException("json字符不是一个数组对象集合");
  145. }
  146. JsonArray jsonArray = jsonElement.getAsJsonArray();
  147. List<T> beans = new ArrayList<T>();
  148. for (JsonElement jsonElement2: jsonArray) {
  149. T bean = new Gson().fromJson(jsonElement2, beanClazz);
  150. beans.add(bean);
  151. }
  152. return beans;
  153. }
  154. /**
  155. * 把相对应节点的内容封装为对象
  156. * @param jsonString json字符串
  157. * @param clazzBean 要封装成的目标对象
  158. * @return 目标对象
  159. */
  160. public static <T> T parserJsonToArrayBean(String jsonString,Class<T> clazzBean){
  161. if(TextUtils.isEmpty(jsonString)){
  162. throw new RuntimeException("json字符串为空");
  163. }
  164. JsonElement jsonElement = new JsonParser().parse(jsonString);
  165. if(jsonElement.isJsonNull()){
  166. throw new RuntimeException("json字符串为空");
  167. }
  168. if(!jsonElement.isJsonObject()){
  169. throw new RuntimeException("json不是一个对象");
  170. }
  171. return new Gson().fromJson(jsonElement, clazzBean);
  172. }
  173. /**
  174. * 按照节点得到节点内容,转化为一个数组
  175. * @param jsonString json字符串
  176. * @param note json标签
  177. * @param clazzBean 集合里存入的数据对象
  178. * @return 含有目标对象的集合
  179. */
  180. public static <T> T parserJsonToArrayBean(String jsonString,String note,Class<T> clazzBean){
  181. String noteJsonString = getNoteJsonString(jsonString, note);
  182. return parserJsonToArrayBean(noteJsonString, clazzBean);
  183. }
  184. /**
  185. * 把bean对象转化为json字符串
  186. * @param obj bean对象
  187. * @return 返回的是json字符串
  188. */
  189. public static String toJsonString(Object obj){
  190. if(obj!=null){
  191. return new Gson().toJson(obj);
  192. }else{
  193. throw new RuntimeException("对象不能为空");
  194. }
  195. }
  196. }

Android-GsonUtil工具类的更多相关文章

  1. 53. Android常用工具类

    主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefer ...

  2. Android 常见工具类封装

    1,MD5工具类: public class MD5Util { public final static String MD5(String s) { char hexDigits[] = { '0' ...

  3. 【转】Android常用工具类

    主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefe ...

  4. Android基础工具类重构系列一Toast

    前言: 一直在考虑写一下Android实际项目中的一些总结,翻看CSDN博客,上一篇已经是一年多曾经. 本系列定位Android基础工具类重构.旨在记录实际项目中经经常使用到的一些工具类,比方Toas ...

  5. (转载)android 一些工具类汇总

    android 一些工具类汇总 作者:曾田生z 字体:[增加 减小] 类型:转载 时间:2016-08-14我要评论 本文给大家汇总介绍了一些常用的Android工具类,非常的简单实用,有需要的小伙伴 ...

  6. 随笔分类 - Android之工具类

    Android之文件搜索工具类 /** * @detail 搜索sdcard文件 * @param 需要进行文件搜索的目录 * @param 过滤搜索文件类型 */ private void sear ...

  7. Android 系统工具类SystemUtils

    包含的功能有: 获取系统中所有APP应用.获取用户安装的APP应用.根据包名和Activity启动类查询应用信息.跳转到WIFI设置.WIFI网络开关.移动网络开关.GPS开关 当前若关则打开 当前若 ...

  8. Android Sqlite 工具类封装

    鉴于经常使用 Sqlite 数据库做数据持久化处理,进行了一点封装,方便使用. 该封装类主要支持一下功能 支持多用户数据储存 支持 Sqlite数据库升级 支持传入 Sql 语句建表 支持 SQLit ...

  9. Android 常用工具类之SPUtil,可以修改默认sp文件的路径

    参考: 1. 利用Java反射机制改变SharedPreferences存储路径    Singleton1900 2. Android快速开发系列 10个常用工具类 Hongyang import ...

  10. Android常见工具类封装

    MD5加密 import android.annotation.SuppressLint; import java.security.MessageDigest; public class MD5 { ...

随机推荐

  1. HDU 2846 Repository(字典树,每个子串建树,*s的使用)

    Repository Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  2. python的with用法

    转自http://blog.kissdata.com/2014/05/23/python-with.html With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作.对于这种场景,Pyth ...

  3. GridView的HyperLinkField的DataNavigateUrlFormatString如何使用自定义的变量,而不是数据库绑定的值

    GridView的HyperLinkField的DataNavigateUrlFormatString如何使用自定义的变量,而不是数据库绑定的值.报错:指定的参数已超出有效值的范围.参数名: inde ...

  4. 使用Spring发送Email

    配置Spring发送邮件 Spring发送邮件底层还是使用JavaMail,我在http://www.cnblogs.com/lz2017/p/6882925.html 中记录过关于JavaMail的 ...

  5. 剖析tcp与udp及应用场景协议方案选择

    什么是TCP和UDP TCP和UDP是TCP/IP协议中的两个传输层协议,它们使用IP路由功能把数据包发送到目的地,从而为应用程序及应用层协议(包 括:HTTP.SMTP.SNMP.FTP和Telne ...

  6. 在VS2005编程中,有的时候DataGridView数据源有几个表的联合查询,而系统又有限制为一个表,怎么办?

    在VS2005编程中,有的时候DataGridView数据源有几个表的联合查询,而系统又有限制为一个表,怎么办? 解决方法:在SqlServer的企业管理器里增加一个视图吧!!!!!!!!(从来没用过 ...

  7. 按键精灵对VBS的支持

    VBSBegin…VBSEnd(VBS块)格式:VBSBegin...VBSEnd用途:可以在VBS块的区域内随意的书写VBS语法指令. 更多说明:由于彻底的转向VBS语言,会导致goto语句不能被兼 ...

  8. WeakHashMap, NOT A CACHE

    Overview Base Map的实现 基于WeakReference的Entity实现 基于Reference和ReferenceQueue实现 它的弱引用是键,而不是值 它的key会被全自动回收 ...

  9. ArcGIS帮助文档VS帮助文档不能复制图片的解决方法

    ArcGIS帮助文档VS帮助文档不能复制图片的解决方法(非常有用)   问题:ArcGIS的学习文档,开发文档,vs的帮助文档,一般都不能复制图片,有的甚至不能复制文本.   解决方法 在文档空白处右 ...

  10. rook issues

    ceph-volumeattacher: failed rbd single_major check, assuming it's unsupported: failed to check for r ...