前两篇解决了一些 Gson 解析的问题,具体可以查看相关文章
工具类中的 Json To List 采取的是循环转换的方式,直接采用之前文章所讲的类型转换,还是抛了异常。
但是不封装成 Utils 工具包的时候,直接指定类型转换,它是可用的
public class GSONUtils { public static final String TAG = GSONUtils.class.getSimpleName(); // 无参的私有构造方法 private GSONUtils() { } // 不用创建对象,直接使用 gson. 就可以调用方法 private static Gson gson = null; /** * 默认的时间格式化 */ private static final String DATE_FORMAT_DEFAULT = "yyyy-MM-dd HH:mm:ss"; /** * 判断gson对象是否存在了,不存在则创建对象 */ static { if (gson == null) { // gson = new Gson(); // 当使用 GsonBuilder 方式时属性为空的时候输出来的json字符串是有键值key的,显示形式是"key":null,而直接 new 出来的就没有"key":null的 gson = buildGson(); } } /** * 默认的 GSON 初始化 */ public static Gson buildGson() { Gson gson = new Gson().newBuilder() .setDateFormat(DATE_FORMAT_DEFAULT) .create(); return gson; } /** * 将对象转成json格式 * Bean To Json * * @param object * @return String */ public static String BeanToJson(Object object) { String jsonString = null; try { if (gson != null) { jsonString = gson.toJson(object); } } catch (Exception e) { Log.e(TAG, "Bean 转 Json 格式异常:" + e); } return jsonString; } /** * 将 json 转成特定的 cls 的对象 * Json To Bean * * @param jsonString * @param cls * @return */ public static T JsonToBean(String jsonString, Class cls) { T t = null; try { if (gson != null) { // 传入json对象和对象类型,将json转成对象 t = gson.fromJson(jsonString, cls); } } catch (JsonSyntaxException e) { Log.e(TAG, "Json 转 Bean 非法json字符串:" + e); } return t; } /** * json字符串转成list * 解决泛型问题 * 备注: * List list=gson.fromJson(jsonString, new TypeToken<List>() {}.getType()); * 该方法会报泛型类型擦除问题 * * @param jsonString * @param cls * @param * @return */ public static List JsonToList(String jsonString, Class cls) { List list = new ArrayList(); try { if (gson != null) { JsonArray array = new JsonParser().parse(jsonString).getAsJsonArray(); for (final JsonElement elem : array) { list.add(gson.fromJson(elem, cls)); } } } catch (JsonSyntaxException e) { Log.e(TAG, "Json 转 List 非法json字符串:" + e); } return list; } /** * json 字符串转成 list map * Json To List<Map<String,T>> * * @param jsonString * @return */ public static List<Map<String, T>> JsonToListMaps(String jsonString) { List<Map<String, T>> list = null; try { if (gson != null) { list = gson.fromJson(jsonString, new TypeToken<List<Map<String, T>>>() { }.getType()); } } catch (JsonSyntaxException e) { Log.e(TAG, "Json 转 List
使用例子:
ListwebDOList = GSONUtils.JsonToList(json,WebDO.class);