Android用Gson解析复杂Json

来源:互联网 发布:正规淘宝代刷信誉平台 编辑:程序博客网 时间:2024/05/21 09:32

前几天用Gson解析项目里的一个json,竟然频频出错,这让我很是郁闷,曾经的一个项目为了解析一个json,写了13个bean类,自此认为再往后遇到json就无压力了,可是我还是小看了遗忘的力量.自此写点博客,来记录项目中遇到的问题.以下2条转自其他人总结.

1、类里面的属性名必须跟Json字段里面的Key是一模一样的;
2、内部嵌套的用[]括起来的部分是一个List,所以定义为 public List<B> b,而只用{}嵌套的就定义为 public C c.

这里遗忘的关键是[]和{}的区别,前一个是List<bean>,后一个直接为一个类.

下面举出实例区分:


Gson解析的json的JsonUtil类:

/*** 把一个map变成json字符串* @param map* @return*/public static String parseMapToJson(Map<?, ?> map) {try {Gson gson = new Gson();return gson.toJson(map);} catch (Exception e) {}return null;}/*** 把一个json字符串变成对象* @param json* @param cls* @return*/public static <T> T parseJsonToBean(String json, Class<T> cls) {Gson gson = new Gson();T t = null;try {t = gson.fromJson(json, cls);} catch (Exception e) {}return t;}/*** 把json字符串变成map* @param json* @return*/public static HashMap<String, Object> parseJsonToMap(String json) {Gson gson = new Gson();Type type = new TypeToken<HashMap<String, Object>>() {}.getType();HashMap<String, Object> map = null;try {map = gson.fromJson(json, type);} catch (Exception e) {}return map;}/*** 把json字符串变成集合* params: new TypeToken<List<yourbean>>(){}.getType(),* * @param json* @param type  new TypeToken<List<yourbean>>(){}.getType()* @return*/public static List<?> parseJsonToList(String json, Type type) {Gson gson = new Gson();List<?> list = gson.fromJson(json, type);return list;}/*** * 获取json串中某个字段的值,注意,只能获取同一层级的value* * @param json* @param key* @return*/public static String getFieldValue(String json, String key) {if (TextUtils.isEmpty(json))return null;if (!json.contains(key))return "";JSONObject jsonObject = null;String value = null;try {jsonObject = new JSONObject(json);value = jsonObject.getString(key);} catch (JSONException e) {e.printStackTrace();}return value;}


下面为使用工具类解析{}类json的情况:

IntegralBean 为一个bean 类

IntegralBean integralDetail = new IntegralBean();

integralDetail = JsonUtil.parseJsonToBean(backdata,IntegralBean.class);

backdata为String 类型的json数据


当最外面为[]时为一个List,列出使用工具类解析的方法:

IntegralTimeBean也为一个bean类

List<IntegralTimeBean> integralDetailTimeList = new ArrayList<IntegralTimeBean>();

integralDetailTimeList = (ArrayList<IntegralTimeBean>) JsonUtil
.parseJsonToList(backdataMoth,
new TypeToken<List<IntegralTimeBean>>() {
}.getType());

backdataMoth为String 类型的json数据

1 0
原创粉丝点击