文档章节

Retrofit使用GSON解析JSON数据

菜鸟上路中
 菜鸟上路中
发布于 2016/04/19 00:01
字数 312
阅读 111
收藏 1
点赞 1
评论 0

在Retrofit中默认使用GSON解析JSON数据。使用GSON将json转换为POJO对象。它默认的解析格式是这样的:

{
  "login": "basil2style",
  "id": 1285344,
  "avatar_url": "https://avatars.githubusercontent.com/u/1285344?v=3",
  "gravatar_id": "123"}


那如果JSON数据是如下内容时,该怎么去解析呢?

{"data":[{"id":1,"divisionStr":"北京","name":"北京","lng":116.39564514160156,"lat":39.92998504638672,"pinyin":"beijing"},{"id":10,"divisionStr":"","name":"上海","lng":121.48789978027344,"lat":31.249162673950195,"pinyin":"shanghai"},{"id":20,"divisionStr":"","name":"广州","lng":113.30764770507812,"lat":23.12004852294922,"pinyin":"guangzhou"},{"id":30,"divisionStr":"","name":"深圳","lng":114.02597045898438,"lat":22.54605484008789,"pinyin":"shenzhen"}}

我们想把data所对应的值中的每一项取出来,然后转换成一个个的对象。

这时候我们需要使用GsonBuilder去重新定义json数据的解析方式。

GSON提供了TypeAdapter,可以在TypeAdapterFactory中定义解析逻辑。而该题中,我只需要获得data所对应得值即可,即数组对象。

private static class ItemTypeAdapterFactory implements TypeAdapterFactory {
       
        @Override
        public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
            final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type);
            final TypeAdapter<JsonElement> elementTypeAdapter = gson.getAdapter(JsonElement.class);


            return new TypeAdapter<T>() {
                @Override
                public void write(JsonWriter out, T value) throws IOException {
                    delegate.write(out, value);
                }
                //当获取了http请求的数据后,获得data所对应的值
                @Override
                public T read(JsonReader in) throws IOException {
                    JsonElement jsonElement = elementTypeAdapter.read(in);
                    if (jsonElement.isJsonObject()) {
                        JsonObject jsonObject = jsonElement.getAsJsonObject();
                        if (jsonObject.has("data")) {
                            jsonElement = jsonObject.get("data");
                        }
                    }

                    return delegate.fromJsonTree(jsonElement);
                }

            }.nullSafe();
        }
    }

© 著作权归作者所有

共有 人打赏支持
菜鸟上路中
粉丝 1
博文 14
码字总数 7161
作品 0
浦东
使用Android API最佳实践

本文由 伯乐在线 - imesong 翻译自 meetme。欢迎加入Android小组。转载请参见文章末尾处的要求。 写在前面 现在,Android应用程序中集成第三方API已十分流行。应用程序都有自己的网络操作和缓...

mingxun ⋅ 2014/04/17 ⋅ 0

android网络框架Retrofit

一、简介 Retrofit在OkHttp之上对网络请求、数据结果做了封装,是一款为简化网络操作推出的框架。 二、gradle依赖 compile 'com.squareup.retrofit:retrofit:2.0.0-beta1' 三、实现步骤 1.创...

席道坤 ⋅ 2016/11/27 ⋅ 0

HTML 解析框架--Fruit-HTML

Fruit 简单的说Fruit之于html正如Gson之于Json,它能让你以一种注解的方式来描述解析的逻辑。下面是一个例子: 1234567891011121314151617181920212223 public class FruitInfo { @Pick("di...

匿名 ⋅ 2017/10/23 ⋅ 0

使用Retrofit2封装适用于组件化项目的网络库

版权声明:本文为博主原创文章,未经我的允许不得转载! 转载请标明出处: http://blog.csdn.net/guiying712/article/details/74427258 ,本文出自:【张华洋的博客】 1、URL的简单构成 URL(...

guiying712 ⋅ 2017/07/05 ⋅ 0

如何对 Android 库进行依赖管理?

Android 开发人员为项目选择库的时候,考虑的因素不仅仅是功能、可用性、性能、文档丰富度和技术支持情况。他们还关心库的大小,以及要添加的方法数量。因为项目越大,依赖也越多,要把应用的...

OneAPM蓝海讯通 ⋅ 2016/01/13 ⋅ 0

我们真的需要使用RxJava+Retrofit吗?

Android.jpg 前言 可以说RxJava+Retrofit是整个2016年Android 开发圈内最受关注的的组合。各大Android论坛上有大量以RxJava+Retrofit+xxx 为标题的文章,此类文章也备受大家的关注。这个组合...

IAM四十二 ⋅ 2016/12/12 ⋅ 0

Retrofit简介

首先分享一首最近很喜欢的歌,可惜简书不支持嵌入ifram。所以分享链接,不能在看文章的页面听了。 All The Time Tips 众所周知,Retrofit、RxJava对于Android开发比较火。所以大家都开始用这...

乐小文 ⋅ 2017/03/08 ⋅ 0

从 ServiceMethod角度来认识retrofit框架

对于Android开发者而言,retrofit可以说算是比较实用的网络请求框架,而且是开源的。那么,从请求执行的角度,以 interface 中我们定义的方法为起始,解读 retrofit 的执行流程。目的是想让我...

小欣妹妹 ⋅ 04/25 ⋅ 0

最美应用-从Android研发工程师的角度之[最美时光]

最美应用-从Android研发工程师的角度之最美时光 @author ASCE1885的 Github 简书 微博 CSDN 最近发现最美应用这样一个网站,它会定期推介一些很有意思的app,作为开发者,每次看到很棒的app...

小树coding ⋅ 2015/08/19 ⋅ 0

Android Retrifot2简单使用学习

简介 Retrofit是一个现在比较火的网络请求框架,它的底层是依靠okhttp实现的(okhttp也是一款很不错的框架之前有使用过),确切的讲,Retrofit是对okhttp的进一步封装,它功能强大,支持同步...

reggie1996 ⋅ 05/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Nginx服务架构初探(四):nginx服务器的rewrite功能

nginx服务器的rewrite功能 1.nginx后端服务器组的配置 1>upstream name {…} name是给服务器组限的组名 2>server address [parameters]; address为服务器地址 parame......

余温灬未存 ⋅ 今天 ⋅ 0

layer.prompt使文本框为空的情况下也能点击确定

最近一直在使用layui,但是用到弹出层layer.prompt时,如果文本框是空的话点击确定没有反应,不能向下执行。 但是我又需要空值,看看我原来的代码。 123456789 layer.prompt...

孟飞阳 ⋅ 今天 ⋅ 0

Linux普通文件压缩工具gzip、Bzip2、xz

第六章 文件压缩和打包 6.1 压缩打包介绍 Linux环境常见压缩文件类型: .zip,.gz,.bz2,.xz, .tar.gz,.tar.bz2,.tar.xz 压缩打包的目的 方便文件传输 节省磁盘空间 减少传输花费的时间 ...

弓正 ⋅ 今天 ⋅ 0

移动弹窗基础知识浅析——IOS弹窗体系

摘要: 最为常见的【弹窗】反而是最“捉摸不定”的东西。各种类型的弹窗傻傻分不清楚,不知道在什么场景下应该用哪种弹窗。尤其是遇到“二次确认”等场景…… 因此,打算从头整理移动弹窗的基...

阿里云云栖社区 ⋅ 今天 ⋅ 0

zabbix短信报警统计以及报表展示

一、需求 由于我们的业务报警比较频繁,之前是针对每个报警进行具体处理,但是有时还会重复出现,或者后续处理有时忘记跟进等,因此进行报警短信的统计,可以针对一些问题与业务跟进,明确后...

o翡翠谷o ⋅ 今天 ⋅ 0

JNI 输出LOG

1、导入log头文件。在你使用的 .c/ .cpp 文件中,导入 log.h 头文件。 #include<android/log.h> 2、在android.mk 加上 LOCAL_LDLIBS := -llog 或 LOCAL_SHARED_LIBRARIES := liblog 3、定义L......

国仔饼 ⋅ 今天 ⋅ 0

主线程pthread_exit 作用

#include <iostream>#include <pthread.h>#include <unistd.h>using namespace std;#define NUM_THREADS 10void* say_hello(void* args){ int i = *((int*)args);/......

xxdd ⋅ 今天 ⋅ 0

崛起于Springboot2.X之Mybatis-xml方式操作mysql数据库(3)

序言:当第一篇讲道Mybatis的时候,只要使用过mybatis的java程序员100%都会知道这种方式,因为这是最广泛最全面的编写sql操作mysql数据库的方式,高级sql的编写往往通过xml方式,接下来进入正...

木九天 ⋅ 今天 ⋅ 1

移动弹窗基础知识浅析——IOS弹窗体系

摘要: 最为常见的【弹窗】反而是最“捉摸不定”的东西。各种类型的弹窗傻傻分不清楚,不知道在什么场景下应该用哪种弹窗。尤其是遇到“二次确认”等场景…… 因此,打算从头整理移动弹窗的基...

猫耳m ⋅ 今天 ⋅ 0

spring elasticsearch 2.4 date 日期

1.mappingPUT user_behavior { "mappings": { "user_behavior": { "properties": { "date": { "type": "createDate", ......

xiaomin0322 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部