android - 如何在 Retrofit 中使用 Gson 转换器解析关联数组?

标签 android json gson retrofit

我从 PHP 服务器接收到 JSON 响应。在 android 中,我需要编写一个 java 模型 (POJO) 来解析 Retrofit(一个用于 http 请求的 Android 库)中的响应。

JSON 结构:

{
  "calendar": {
    "2016-06-10": [
      {
        "time": "10h00m",
        "title": "PROVA P2",
        "description": "LP / RED / ED.FIS - 80 E 90",
        "color": "#990000"
      }
    ],
    "2016-06-11": [
      {
        "time": "10h00m",
        "title": "SIMULADO",
        "description": "LOREM PSIUM DOLOR LOREM",
        "color": "#009900"
      },
      {
        "time": "11h00m",
        "title": "CONSELHO DE CLASSE",
        "description": "LOREM PSIUM DOLOR",
        "color": "#009900"
      }
    ]
  },
  "error": false
}

JSON 来自 PHP 服务器。 我如何使用 Retrofit 处理它?

最佳答案

要使用动态键解析 JSON,您的 POJO 类中需要一个 Map

将以下 POJO 类添加到您的项目中:

  1. CalendarResponse.java

    public class CalendarResponse {
      @SerializedName("calendar")
      Map<String, List<Entry>> entries;
    
      @SerializedName("error")
      private boolean error;
    }
    
  2. Entry.java

    public class Entry {
      @SerializedName("time")
      private String time;
    
      @SerializedName("title")
      private String title;
    
      @SerializedName("description")
      private String description;
    
      @SerializedName("color")
      private String color;
    }
    
  3. 在您的端点改造接口(interface)中使用 CalendarResponse 类,请参见下面的示例

    public interface CalendarService {
      @GET("<insert your own relative url>")
      Call<CalendarResponse> listCalendar();
    }
    
  4. 按如下方式(同步)执行调用:

    Call<CalendarResponse> call = calendarService.listCalendar();
    CalendarResponse result = call.execute().body();
    

如果需要,这里有一个用 GSON 解析 JSON 的例子:

Gson gson = new GsonBuilder().create();
CalendarResponse b = gson.fromJson(json, CalendarResponse.class);

关于android - 如何在 Retrofit 中使用 Gson 转换器解析关联数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37883748/

相关文章:

android - 在没有应用程序的情况下测试 firebase 云消息传递

android - 使用 DrawerLayout 时发生未知错误?

java - boolean 值在 RecyclerView 中单击按钮时不起作用

java - 如何将任意 JSON 转换为 Java 中可用的结构

java - gson中如何使用缩进生成json文件

android - (Android) 如何捕获 "ring"事件?

c# - .NET WCF 服务获取 Blob 的 JSON 列表

python - 在Python中循环和计算json响应

json - REST API 返回 JSON/XML 以外的内容是否可以接受?

java - 使用 Java 8 为 Gson 编写序列化程序