近期在项目开发中,遇到需要传递大批量数据到安卓端,以前的json解析方法即JsonObject和JsonArray,这对于解析小数据的json数据还是比较实用,但是当解析json数据比较复杂的时候这种方法就显得比较吃力也比较麻烦了,通过Gson解析,就会方便很多。
运用过程中注意toJson,fromJson的意思,源码写的比较直观
public <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException {
Object object = fromJson(json, (Type) classOfT);
return Primitives.wrap(classOfT).cast(object);
}
@SuppressWarnings("unchecked")
public <T> T fromJson(String json, Type typeOfT) throws JsonSyntaxException {
if (json == null) {
return null;
}
StringReader reader = new StringReader(json);
T target = (T) fromJson(reader, typeOfT);
return target;
}
public String toJson(Object src) {
if (src == null) {
return toJson(JsonNull.INSTANCE);
}
return toJson(src, src.getClass());
}
一个是将对象转换为字符串,一个是将字符串转换为对象,不过要注意校验功能
封装的一个工具类
public class GsonTools {
/**TODO 转换为json字符串
* @param src 要转换成json格式的 对象
* @return
*/
public static String createJsonString(Object src) {
Gson gson = new Gson();
String jsonString = gson.toJson(src);
return jsonString;
}
/**TODO 转换为指定的 对象
* @param jsonString
* @param type 指定对象的类型 ,即 T.class
* @return
*/
public static <T> T getObject(String jsonString, Class<T> type) {
T t = null;
try {
Gson gson = new Gson();
t = gson.fromJson(jsonString, type);
} catch (JsonSyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return t;
}
/**得到 一个List<T>集合
* @param jsonString
* @param type T的类型
* @return
*/
public static <T> List<T> getList(String jsonString, Class<T> type) {
List<T> list = new ArrayList<T>();
Gson gson = new Gson();
list = gson.fromJson(jsonString, new TypeToken<List<T>>() {
}.getType());
return list;
}
/**TODO 得到一个List<T> 的集合
* @param jsonString json字符串
* @param type 数组的类型 ,即T[].class
* @return
*/
public static <T> List<T> StringTolist(String jsonString, Class<T[]> type) {
T[] list = null;
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString, type);
} catch (JsonSyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return Arrays.asList(list);
}
/**把json字符串转换为 String 集合
* @param jsonString
* @return
*/
public static List<String> getStrings(String jsonString) {
List<String> list = new ArrayList<String>();
Gson gson = new Gson();
new TypeToken<List<String>>(){}.getType();
list = gson.fromJson(jsonString, new TypeToken<List<String>>() {
}.getType());
return list;
}
/**TODO 将json数据解析为Map<String,Object>集合
* @param jsonString
* @return
*/
public static List<Map<String, Object>> getMaps(String jsonString) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Gson gson = new Gson();
list = gson.fromJson(jsonString,
new TypeToken<List<Map<String, Object>>>() {
}.getType());
return list;
}