Android Studio第二十四期 - Gson封装Utils

代码已经整理好,效果如下:

Json.Utils:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonParser;
import com.haiersmart.utilslib.data.StringUtil;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class JsonUtils {

   /** 获取Gson实例 **/
   private static Gson getInstance() {
      GsonBuilder gsonBuilder = new GsonBuilder();
      gsonBuilder.setDateFormat("yyyy-MM-dd HH:mm:ss");
      gsonBuilder.registerTypeAdapter(Object.class, new NaturalDeserializer());
      Gson gson = gsonBuilder.create();
      return gson;
   }

   /**
    * 解析集合
    * 
    * @param json
    *            数据
    * @param beanClass
    *            泛型
    * @return 泛型集合
    */
   public static <T> List<T> getBeanList(String json, Class<T> beanClass) {
      return getBeanList(json, null, beanClass);
   }

   /**
    * 解析集合
    * 
    * @param json
    * @param key
    *            json数据key
    * @param beanClass
    *            泛型
    * @return 泛型集合
    */
   public static <T> List<T> getBeanList(String json, String key, Class<T> beanClass) {
      JsonParser parser = new JsonParser();
      Gson gson = getInstance();
      JsonElement contentElement = null;
      List<T> elementList = new ArrayList<T>();
//    try {
//       @SuppressWarnings("unused")
//       JSONObject object = new JSONObject(json);
//    } catch (JSONException e1) {
//       return elementList;
//    }
      if (StringUtil.isBlank(key) || StringUtil.isBlank(json)) {
         contentElement = parser.parse(json).getAsJsonArray();
      } else {
         JsonObject jsonObject = parser.parse(json).getAsJsonObject();
         contentElement = jsonObject.get(key);
      }
      if (StringUtil.isBlank(contentElement))
         return elementList;
      if (contentElement.isJsonArray()) {
         JsonArray jsonArray = contentElement.getAsJsonArray();
         try {
            for (int i = 0; i < jsonArray.size(); i++) {
               JsonElement jsonObj = jsonArray.get(i);
               T entity = gson.fromJson(jsonObj, beanClass);
               elementList.add(entity);
            }
         } catch (ClassCastException e) {
         } catch (JsonParseException e) {
         }
         return elementList;
      }
      return elementList;
   }

   /**
    * 解析单个bean
    * 
    * @param json
    * @param clazz
    * @return 泛型
    */
   public static <T> T getBean(String json, final Class<T> clazz) {
      return getBean(json, null, clazz);
   }

   /**
    * 解析单个bean
    * 
    * @param json
    * @param key
    *            解析的json数据key
    * @param clazz
    * @return 泛型
    */
   @SuppressWarnings("unchecked")
   public static <T> T getBean(String json, String key, final Class<T> clazz) {
      JsonParser parser = new JsonParser();
      Gson gson = getInstance();
      JsonElement contentElement = null;
      try {
         @SuppressWarnings("unused")
         JSONObject object = new JSONObject(json);
      } catch (JSONException e1) {
         return null;
      }
      if (StringUtil.isBlank(key)) {
         contentElement = parser.parse(json).getAsJsonObject();
      } else {
         JsonObject jsonObject = parser.parse(json).getAsJsonObject();
         contentElement = jsonObject.get(key);
      }
      if (StringUtil.isBlank(contentElement))
         return null;
      if (contentElement.isJsonPrimitive()) {
         if (clazz == String.class) {
            return (T) contentElement.getAsString();
         } else if (clazz == Integer.class) {
            return (T) Integer.valueOf(contentElement.getAsString());
         } else if (clazz == Number.class) {
            return (T) contentElement.getAsNumber();
         }
      } else if (contentElement.isJsonObject()) {
         JsonObject contentObj = contentElement.getAsJsonObject();
         T content = null;
         try {
            content = gson.fromJson(contentObj, clazz);
         } catch (ClassCastException e) {
         } catch (JsonParseException e) {
            System.out.println(e.getStackTrace().toString());
         }
         return content;
      }
      return null;
   }

   /**
    * 根据key 解析相关字段
    * 
    * @param json
    * @param key
    * @return
    */
   public static Object getObjectByKey(String json, String key, String targetkey) {
      JsonParser parser = new JsonParser();
      JsonElement jsonElement;
      try {
         JsonObject jsonObject = parser.parse(json).getAsJsonObject();
         jsonElement = jsonObject.get(key);
         return jsonElement.getAsJsonObject().get(targetkey).toString();
      } catch (Exception e) {
         return null;
      }
   }

   /** JSONObject生成Json字符串 **/
   public static String getJSONStringByJSONObject(JSONObject jsonobject) {
      String s;
      if (jsonobject == null)
         s = "";
      else
         s = jsonobject.toString();
      return s;
   }

   /** 解析JSONObject Json字符串 **/
   public static JSONObject getJSONObjectByJSONString(String str) {
      str = str.replace("\ufeff", "");
      JSONObject jsonobject;
      if (str != null)
         try {
            jsonobject = new JSONObject(str);
         } catch (JSONException _ex) {
            jsonobject = null;
         }
      else
         jsonobject = null;
      return jsonobject;
   }

   /** 解析JSONArray Json字符串 **/
   public static JSONArray getJSONArrayByJSONString(String str) {
      JSONArray jsonarray;
      if (str != null)
         try {
            jsonarray = new JSONArray(str);
         } catch (JSONException _ex) {
            jsonarray = null;
         }
      else
         jsonarray = null;
      return jsonarray;
   }
}

总结:现在的项目都是fastjson和Gson一起的,大家需要自己封装好util方便调用~

时间: 2024-12-10 12:14:48

Android Studio第二十四期 - Gson封装Utils的相关文章

Android Studio第二十九期 - RecycleView的表格形式

本来说好了,最后一篇了,结果又来了一个新需求,就再写一篇吧~ 效果图是这样的: 思路是这样: demo效果: 其实要注意的地方是: 1.RecycleView在ScrollView中不滚动的设置: 2.RecycleView在ScrollView中滚动不灵敏: 3.RecycleView表格显示列数的填充算法: 不滚动的写法: FullyLinearLayoutManager: package com.example.p010_recycleviewall.recycleviewbiaoge;

Android Studio第二十五期 - 自定义键盘+支付输入框

代码已经整理好,效果如下图: 地址:https://github.com/geeklx/MyApplication/tree/master/p017_keyboard

Android Studio第二十六期 - 自定义Activity中Fragment之间的传值

代码已经整理好,效果如下图:(附:copy loader的~剪刀手~) 地址:https://github.com/geeklx/MyApplication/tree/master/p018_activity_fragmenta_b

Android Studio第十四期 - Swipebacklayout最新版

支持了6.0~代码已经整理好,效果如下图: 地址:https://github.com/geeklx/MyApplication/tree/master/p011_swipebacklayout

Android Studio第二十期 - 识别Recorder声纹显示水波泡泡效果

代码已经整理好,效果如下图: 总结:此版本控制在6.0以下,以上的自己手动改targetSdkVersion,另外要想想怎么做到语音识别的时候并且播放音乐和此通用一个Record,以后要写一写~ 地址:http://down.51cto.com/data/2260152

Android第二十四期 - 游戏公告跑马灯效果

代码已经整理好,效果如下: 地址:http://down.51cto.com/data/1887395

Android Studio第十五期 - 友盟统计集成

首先是官网的地址:http://dev.umeng.com/analytics/android-doc/integration#2_5 然后是注意实例化到Application中的代码:  private void setUMEngAnalsys() {   //开启Debug模式 上线可关闭   MobclickAgent.setDebugMode(true);   // SDK在统计Fragment时,需要关闭Activity自带的页面统计,   // 然后在每个页面中重新集成页面统计的代码

OSChina 技术周刊第二十四期 —— C# 6.0 的新特性

每周技术抢先看,总有你想要的! 移动开发 [博客]Swift社交应用文本输入优化汇总 服务端开发/管理 [翻译]HTTP/1 的最佳实践并不适合 HTTP/2 [翻译]使用 AppDomain 存储实现大数据集合 [翻译]AngularJS 对比 React [软件]PHP 论坛软件 PHPHub [软件]监控和告警系统 Bosun [软件]多主机容器网络 SocketPlane [博客]Django学习笔记 [博客]Tornado源码分析-Web Framework [博客]话说对 Hiber

Android Studio第十八期 - Snaphelper

代码已经整理好,效果如下图: GravitySnapHelper: /*  * Copyright (C) 2016 The Android Open Source Project  * Copyright (C) 2016 Rúben Sousa  *  * Licensed under the Apache License, Version 2.0 (the "License");  * you may not use this file except in compliance