android - Retrofit 2.0 如何解析嵌套的 JSON 对象?

标签 android json retrofit

我们的团队决定使用 Retrofit 2.0我正在对这个库进行一些初步研究。如标题所述,我想在我们的 Android 应用程序中通过 Retrofit 2.0 解析一些嵌套的 JSON 对象。

例如,here是一个嵌套的 JSON 对象,格式为:

{
        "title": "Recent Uploads tagged android",
        "link": "https://www.flickr.com/photos/tags/android/",
        "description": "",
        "modified": "2015-10-05T05:30:01Z",
        "generator": "https://www.flickr.com/",
        "items": [
        {
            "title": ...
            "link": ...
            "media": {"m":"This is the value I want to get:)"}
            "description": ...
            "published": ...
            "author": ...
            "author_id": ...
            "tags": ...
        },
        {...},
        ...
        ]
}

我对 items 数组中的 JSON 对象感兴趣。我注意到有 some posts关于通过 Retrofit 1.X 解析嵌套的 JSON 对象,但最新的 Retrofit 2.0 API 发生了很大变化,在适应新的 API 时会感到困惑。

我想到了两种可能的解决方案:

  1. 编写我自己的 JSON 转换器工厂,它扩展了 Converter.Factory .
  2. 以String类型返回原始响应并自行解析。但根据我最初的研究,要从 Retrofit 2.0 获得原始响应并不容易。 Retrofit 2.0 似乎坚持在将响应传递给我之前将其转换为某些东西,并且 Retrofit 不提供自己的 StringConverter。 (我可能错了~)

更新:我们实际上可以通过将 JSONElement 设置为 HTTP API 接口(interface)的 pojo 并使用 Retrofit 提供的 GSONConverter 作为转换器来获取原始响应。

最佳答案

假设您的完整 JSON 看起来像

{
  "title": "Recent Uploads tagged android",
  "link": "https://www.flickr.com/photos/tags/android/",
  "description": "",
  "modified": "2015-10-05T05:30:01Z",
  "generator": "https://www.flickr.com/",
  "items": [
    {
      "member1": "memeber value",
      "member2": "member value"
    },
    {
      "member1": "memeber value",
      "member2": "member value"
    }
  ]
}

所以 Pojo 类应该是

public class MainPojo {
    private String title; 
    private String description;
    private String link;
    private String generator;
    private String modified;
    private ArrayList<Items> items;

    // Getters setters
}

public class Items {
    private String member2;
    private String member1;

    // Getters setters
}

注意:这是您的 JSON 的类似解决方案。如果 JSON 有其他键,可以更改 Items.java 的成员。


将 Pojo 更新为新的 JSON

public class Items {
    private String tags;
    private String author;
    private String title;
    private String description;
    private String link;
    private String author_id;
    private String published;
    private Media media;

    // Getters and Setters
}

public class Media {
    private String m;
    // Getters and Setters
}

关于android - Retrofit 2.0 如何解析嵌套的 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32942661/

相关文章:

android - 在 Retrofit 中使用 200 响应代码映射错误响应

android - 我无法加载gradle更改,甚至无法在android studio中运行该应用

java - 从 WiFi 连接切换到 3g 会导致连接挂起?

java - 在 Java 中从 URL 获取 JSON 项

java - 如何在收到API响应后动态更改textview?

java - 使用 Twitter 搜索 API 时出现 400 错误代码

android - 无法修改写入事务 Realm Android 之外的托管对象

c# - 使用 C# 和 Unity 开发 Android 游戏

java - 将元数据添加到 RESTful JSON 响应的最佳实践是什么?

c# - 使用 JSON.NET 序列化/反序列化对象字典