使用Gson解析数据

使用Gson解析数据时可以把要解析的内容看作整个对象,然后以对象的形式解析。

但在有些时候,需要对数据某些字段进行判断,再根据结果进行解析,这时候就需要对解析的内容的某些部分单独解析。

使用方式如下:

JsonReader reader = new JsonReader(new StringReader(value));
reader.setLenient(true);
JsonObject jsonObject = new JsonParser().parse(reader).getAsJsonObject();
以JsonParser.parse的形式,获取JsonElement对象,再通过getAsInt,getAsJsonArray等的形式便可获取到要解析的字段。

其中,在new JsonParser().parse()的方法的时候,parse()的参数如果为String字符串,在某些情况会出错。在用公司平板测试时,会偶尔报一些错误,但是在手机上则没有报这些错误。使用参数为JsonReader的形式可以避免这些错误。

同时,解析内容如果为

{"countpage": 1,

   "data": [

       {

           "cid": "5",                                                       

           "code": "00000006",                                   

           "iccode": "15118375619",                        

           "id": "6",                                                        

           "initial": "l",                                                  

           "name": "张三",                   

           "parents": "张@@",                               

           "parentsphone": "XXXXXXXX",        

           "parid": "6",                                                 

           "sex": "1",                                                     

           "sid": "2",                                                           

           "token": "ca39f511a25814c9475f6e5f952f9d89"
       },
     .....

]}
也会出现解析异常,可以使用以下的形式解析,避免出错。通过getAsJsonArray()获取到集合对象,再进行解析。
     public <T> ArrayList<T> getDataList(JsonArray jsonArray, Class<T> cls) {

		ArrayList<T> mList = new ArrayList<T>();

		try {
			for (final JsonElement elem : jsonArray) {
				mList.add(new Gson().fromJson(elem, cls));
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return mList;
	}

附:常见的解析形式

	/**
	 * 解析返回字符串List集合
	 * @param jsonString
	 * @return
	 */
	public static List<String> getListString(String jsonString) {
		List<String> list = new ArrayList<String>();
		try {
			Gson gson = new Gson();
			list = gson.fromJson(jsonString, new TypeToken<List<String>>() {
			}.getType());

		} catch (Exception e) {

		}
		return list;
	}

	/**
	 * 解析返回List内嵌Map集合
	 * @param jsonString
	 * @return
	 */
	public static List<Map<String, Object>> getListMap(String jsonString) {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		try {
			Gson gson = new Gson();
			list = gson.fromJson(jsonString, new TypeToken<List<Map<String, Object>>>() {
			}.getType());
		} catch (JsonSyntaxException e) {
			e.printStackTrace();
		}

		return list;
	}

        /**
	 * 解析List集合
	 * @param jsonElement
	 * @param cls
	 * @return
	 */
	public <T> List<T> getListData(JsonElement jsonElement, Class<T> cls) {

		List<T> mList = new ArrayList<T>();

		try {
			mList = new Gson().fromJson(jsonElement, new TypeToken<List<T>>() {
			}.getType());

		} catch (Exception e) {
			e.printStackTrace();
		}
		return mList;
	}

      public static <T> T getTData(String jsonString, Class<T> cls) {
		T t = null;
		try {
			Gson gson = new Gson();
			t = gson.fromJson(jsonString, cls);
		} catch (Exception e) {

		}
		return t;
	}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值