`
wx1569110409
  • 浏览: 20059 次
文章分类
社区版块
存档分类
最新评论

Retrofit使用GSON解析JSON数据

 
阅读更多

在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();
        }
    }

转载于:https://my.oschina.net/Denniswang/blog/662042

分享到:
评论

相关推荐

    使用Gson解析json数据

    本教程将重点介绍如何使用Gson库在Java环境中解析JSON数据。 Gson是Google提供的一款开源库,它能够将Java对象转换为对应的JSON字符串,也可以将JSON数据反序列化为Java对象。这对于处理JSON数据非常方便。在本示例...

    Eclipse下使用Google Gson解析Json数据示例+Android Studio下使用Google Gson解析Json数据示例

    本文将详细介绍如何在Eclipse和Android Studio环境下使用Gson库来解析Json数据。 首先,我们来看Eclipse下的Gson使用示例。在Eclipse中,你需要先引入Gson库。这可以通过在项目构建路径中添加Gson的jar文件完成,...

    android中gson解析json数据例程

    本篇文章将详细介绍如何在Android应用中使用Gson库解析JSON数据,以便更好地理解这一关键知识点。 首先,我们要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...

    JSON、GSON解析json

    3. 使用GSON解析JSON: - 创建Java对象:首先,你需要创建对应的Java类,这些类的字段名应与JSON中的键对应。 - 创建Gson实例:`Gson gson = new Gson();` - 将JSON字符串转换为Java对象:`MyObject obj = gson....

    Android-retrofit网络封装库内部使用gson解析json

    当我们调用`Retrofit.create(ApiService.class)`时,Retrofit会根据`getUser`方法的返回类型`Call&lt;User&gt;`使用Gson转换器将JSON数据转换为`User`对象。 在实际使用中,我们还需要处理网络请求的异步性质。这通常通过...

    mvp-retrofit-gson-rxjava

    在Retrofit中,Gson通常作为转换器(Converter)使用,负责处理网络响应数据的解析。 RxJava是一个响应式编程库,它提供了异步编程的解决方案,并通过Observables(观察者)和Subscribers(订阅者)的概念来处理...

    retrofit_gson.rar

    总结来说,Retrofit与Gson的结合使用使得Android开发中的网络请求和数据解析变得简单而高效。它们降低了代码的复杂性,提高了开发效率,同时也提升了应用程序的性能。在实际项目中,开发者可以充分利用这两款库的...

    Android_JSON数据解析

    总结,Android中解析JSON数据涉及的关键知识点包括JSON的基本结构、Gson库的使用、JSONObject和JSONArray的操作、Volley库的网络请求以及Retrofit框架的使用。这些工具和技术使得Android开发者能够高效地处理服务器...

    Android解析Json数据的PPT和源码

    使用Gson解析JSON数据非常方便,例如: ```java String jsonString = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"; Gson gson = new Gson(); MyObject obj = gson.fromJson(jsonString, MyObject.class...

    Android-06-解析json数据

    // 使用Gson解析JSON到Person对象 Gson gson = new Gson(); Person person = gson.fromJson(jsonString, Person.class); ``` ### 3. FastJson库 阿里巴巴的FastJson库以其高效著称,它提供了一种更简洁的方式来...

    老罗android 解析json数据源码

    本教程聚焦于老罗讲解的Android解析JSON数据的源码分析,这对于深入理解JSON处理以及优化应用程序性能至关重要。 首先,我们需要了解JSON的基本结构。JSON是一种基于键值对的格式,数据以键值对的形式存储,如{"key...

    retrofit2_converter-gson_gson_okhttp_okio

    Retrofit利用Gson解析JSON数据,通过OkHttp进行网络通信,而Okio则优化了底层的数据读写。这样的组合使得开发者能更方便地构建网络请求,同时享受到高效、稳定和灵活的网络通信体验。 在实际项目中,开发者可以使用...

    android解析json数据)第一集JsonProject.zip

    在“android解析json数据)第一集JsonProject.zip”这个压缩包中,我们很可能会找到一个实战项目,展示了如何在Android应用中处理JSON数据。通过这个项目,我们可以学习到以下关键知识点: 1. JSON基本结构:JSON...

    android与服务器实现json数据交互解析包含Gson

    例如,使用OkHttp发送GET请求获取JSON数据,然后使用Gson解析: ```java OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("http://your-api-url") .build(); client....

    android异步远程解析json数据绑定到listview上

    总的来说,"android异步远程解析json数据绑定到ListView上"这一过程涵盖了许多Android开发的核心技术,包括异步编程、网络请求、JSON解析、数据绑定和异常处理。理解并熟练掌握这些知识点对于提升Android应用的性能...

    android 解析json数据

    本教程将详细介绍如何在Android中解析JSON数据。 1. JSON基本结构: JSON由键值对组成,数据以大括号`{}`表示对象,数组用方括号`[]`表示。键值对中,键用引号包围,如`"key"`,值可以是字符串、数字、布尔值、...

    retrofit,rxjava,okhttp,gson,constraint-layout用到的库

    它可以轻松地将Java对象转换成JSON字符串,也可以将JSON字符串解析为相应的Java对象,这对于处理服务器返回的JSON数据至关重要。 **ConstraintLayout** 是Android Studio中的一款布局工具,它提供了更强大的界面...

    Android JSON数据的封装及解析

    四、使用Gson库解析JSON Gson库提供了更简洁的方法来序列化和反序列化JSON。首先,需要创建对应的Java对象。 ```java public class Person { private String name; private int age; private String city; // ...

    Gson解析数据

    然后,我们可以使用`Gson.fromJson()`方法将JSON字符串解析为Java对象: ```java String jsonString = "{\"name\":\"John\", \"age\":30}"; Gson gson = new Gson(); User user = gson.fromJson(jsonString, User....

    retrofit converter-gson converter-scalars fastjson

    - **gson-2.0.jar**:这是Gson库的独立版本,与Retrofit的Converter-Gson一起使用,处理JSON数据。 - **butterknife-plugin.jar**:ButterKnife是一个视图注入库,简化了Android开发中的UI组件绑定。 以上就是...

Global site tag (gtag.js) - Google Analytics