用Gson解析纯json数组的方法总结 - CSDN博客

799 阅读1分钟
原文链接: blog.csdn.net

用Gson解析json字符串极为方便快捷,不过解析json对象(JsonObject)比较容易,解析json数组(JsonArray)相对麻烦点,在这里总结下个人开发工程中用到的三种解析json数组的方法,先看工具类:

/** * 使用Gson进行json的转换工具类 * * @author Lee */ import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import java.util.List;
import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; public class GsonUtils {
public static <T> T parseJSON(String json, Class<T> clazz) { Gson gson = new Gson(); T info = gson.fromJson(json, clazz); return info; } public static <T> T parseJSON(String json, Type type) { Gson gson = new Gson(); T info = gson.fromJson(json, type); return info; }
public static <T> List<T> jsonToList(String json, Class<? extends T[]> clazz) { Gson gson = new Gson(); T[] array = gson.fromJson(json, clazz); return Arrays.asList(array); }
/** * @param json * @param clazz * @return */ public static <T> ArrayList<T> jsonToArrayList(String json, Class<T> clazz) { Type type = new TypeToken<ArrayList<JsonObject>>() {}.getType(); ArrayList<JsonObject> jsonObjects = new Gson().fromJson(json, type); ArrayList<T> arrayList = new ArrayList<>(); for (JsonObject jsonObject : jsonObjects) { arrayList.add(new Gson().fromJson(jsonObject, clazz)); } return arrayList; }
private GsonUtils(){}
}
json数据: [ { "id":"162478", "biaoti":"你怎么知道", "dianjishu":"124", "riqi":"2017-6-20", "leibie":"笑话", "leibie_en":"Adult jokes", "leibieid":"2", "pinglun":"0", "xihuan":"2457", "neirong":"  路上遇见一……", "zuozhe":"勿忘初心" }, Object{...},//以下数据省略 Object{...}, Object{...}, Object{...}, Object{...}, Object{...}, Object{...}, Object{...}, Object{...} ]
使用方法:
方法1: List<JokeInfo> info = new ArrayList<>(); try { info = GsonUtils.jsonToArrayList(str, JokeInfo.class); }catch (JsonSyntaxException e){ e.printStackTrace(); } 方法2: JokeInfo[] infos = new JokeInfo[info.size()]; infos = info.toArray(infos); try { info = GsonUtils.jsonToList(str, infos.getClass()); }catch (JsonSyntaxException e){ e.printStackTrace(); }
方法3: try { info = GsonUtils.parseJSON(str, new TypeToken<ArrayList<JokeInfo>>() { }.getType()); }catch (JsonSyntaxException e){ e.printStackTrace(); } 打印大小: if (info != null) { if (info.size() > 0) { Log.e(TAG, "size=" + info.size()); } }
从上面三种方法实现可以看出,方法3用起来相对比较简单一些,不过性能速度方面还没去做深入对比,就留待有心的读者进一步研究对比了。

文章有道笔记地址:http://note.youdao.com/share/?id=1a705937188ea03cafc67e42e5c67fec&type=note#/