使用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;
}