1、类梳理:
https://github.com/google/gson
- Gson类:解析json的最基础的工具类
- JsonParser类:解析器来解析JSON到JsonElements的解析树
- JsonElement类:抽象类(见下图);
- JsonObject类:JsonElement的Map集合。
LinkedTreeMap<String, JsonElement> members =
new LinkedTreeMap<String, JsonElement>();
- JsonArray类:JsonElement的List集合。
List<JsonElement> elements;
- JsonPrimitive:A class representing a Json primitive value. 基本类型。
- TypeToken类:用于创建type,比如泛型List<?>
2、JsonElement
JsonObject,JsonArray,JsonPrimitive,JsonNull都是JsonElement这个抽象类的子类。
JsonElement的简单说明 (荐)

3、JsonParser
4、数据解析
public class GsonUtil {
/**
* 把modelA对象的属性值赋值给bClass对象的属性。
*
* @param modelA
* @param bClass
* @param <T>
* @return
*/
public static <A, T> T modelAconvertoB(A modelA, Class<T> bClass) {
try {
Gson gson = new Gson();
String gsonA = gson.toJson(modelA);
T instanceB = gson.fromJson(gsonA, bClass);
return instanceB;
} catch (Exception e) {
return null;
}
}
public static String toJson(Object obj) {
return new Gson().toJson(obj);
}
/**
* Gson泛型解析Json报错:com.google.gson.internal.LinkedTreeMap cannot be cast to test.UserBean
*
* @param jsonString
* @param cls
* @param <T>
* @return
*/
public static <T> List<T> getObjectList(String jsonString, Class<T> cls) {
if (TextUtils.isEmpty(jsonString)) {
LegoLog.w("json转换异常,jsonString is null");
return new ArrayList<>();
}
List<T> list = new ArrayList<>();
try {
Gson gson = new Gson();
JsonArray arry = new JsonParser().parse(jsonString).getAsJsonArray();
for (JsonElement jsonElement : arry) {
list.add(gson.fromJson(jsonElement, cls));
}
} catch (Exception e) {
LegoLog.e(e.getMessage(), e);
}
return list;
}
public static <T> Set<T> getObjectSet(String jsonString, Class<T> cls) {
Set<T> list = new HashSet<>();
try {
Gson gson = new Gson();
JsonArray arry = new JsonParser().parse(jsonString).getAsJsonArray();
for (JsonElement jsonElement : arry) {
list.add(gson.fromJson(jsonElement, cls));
}
} catch (Exception e) {
LegoLog.e(e.getMessage(), e);
}
return list;
}
public static <T> T fromJson(String json, TypeToken<T> token) {
return new Gson().fromJson(json, token.getType());
}
public static <T> T fromJson(String json, Class<T> clazz) {
return new Gson().fromJson(json, clazz);
}
/**
* 转成json类型
*
* @param object
* @return
*/
public static String toGsonString(Object object) {
String gsonString;
Gson gson = new Gson();
gsonString = gson.toJson(object);
return gsonString;
}
/**
* 将Object类型的json返回值,转换成 JsonObject
*
* @param objectJson
* @return
*/
public static JsonObject toJsonObject(Object objectJson) {
String jsonStr = toGsonString(objectJson);
if (TextUtils.isEmpty(jsonStr)) {
throw new RuntimeException("json字符串");
}
JsonElement jsonElement = new JsonParser().parse(jsonStr);
if (jsonElement.isJsonNull()) {
throw new RuntimeException("得到的jsonElement对象为空");
}
JsonObject jsonObject = jsonElement.getAsJsonObject();
return jsonObject;
}
/**
* 转成bean
*/
public static <T> T GsonToBean(String gsonString, Class<T> cls) {
T t = new Gson().fromJson(gsonString, cls);
return t;
}
public static <T> T GsonToBean(JsonObject jsonObject, Class<T> cls) {
String gsonString = String.valueOf(jsonObject);//可以
// String gsonString2 = toGsonString(jsonObject);//可以
// String gsonString3 = jsonObject.toString();//不支持这种写法
return GsonToBean(gsonString, cls);
}
}
public void onSuccess(Object result) {
super.onSuccess(result);
JsonObject jsonObject = GsonUtil.toJsonObject(result);
//是否具有整改下发权限(大队、支队角色)
boolean zgxfFlag = jsonObject.get("zgxfFlag").getAsBoolean();
SpUtil.setZgxf(zgxfFlag);
JsonObject object = jsonObject.get("user").getAsJsonObject();
User user = GsonUtil.GsonToBean(object, User.class);
SpUtil.setUser(user);
}
本文详细介绍了Gson库中各类核心组件的使用方法,包括Gson、JsonParser、JsonElement等,展示了如何通过Gson进行JSON数据的解析、转换及错误处理。提供了丰富的示例代码,如将对象转换为JSON字符串、从JSON字符串解析对象、处理泛型解析错误等。
1153

被折叠的 条评论
为什么被折叠?



