便捷的Gson转换方法

比如微博热搜数据,结构如图:



这里需要获得card_group中每一个参数的数据,并保存为一个object,其class如下:

public class HotLine {
    String pic;
    String desc;
    String icon;
    String desc_extr;
     //getter and setter
}

采用volley请求,重写parse异步处理:

            @Override
            protected Response<String> parseNetworkResponse(NetworkResponse response) {
                String parsed;
                try {
                    parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
                } catch (UnsupportedEncodingException e) {
                    parsed = new String(response.data);
                }
                JsonElement je = JsonParser.parseString(parsed);
                if (je.getAsJsonObject().get("ok").getAsInt()!=1){
                    return Response.error(new ParseError());
                }
//////////////////////////////////////////////重点部分//////////////////////////////////////////////
                Type type =new TypeToken<List<HotLine>>(){}.getType();
                List<HotLine> hotLineList = new Gson().fromJson(
                       je.getAsJsonObject().get("data").getAsJsonObject().
                       get("cards").getAsJsonArray().get(0).
                       getAsJsonObject().get("card_group").getAsJsonArray(),type);
//////////////////////////////////////////////重点部分//////////////////////////////////////////////
                ((FindViewModel) viewModel).getHotLineListLive().postValue(hotLineList);
                Log.i("API", "微博热搜请求成功");
                return Response.success(null, HttpHeaderParser.parseCacheHeaders(response));
            }

重点就在标记里,先把请求得到的StringJsonElement里,然后做一个List<HotLine>type,然后直接从JsonElement读到需要的card_groupJsonArray,用Gson转换就行。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。