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

2024-04-15

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

例如,是一个嵌套的 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": ...
        },
        {...},
        ...
        ]
}

我对里面的 JSON 对象感兴趣items大批。我注意到有一些帖子 https://stackoverflow.com/questions/23070298/get-nested-json-object-with-gson-using-retrofit关于通过 Retrofit 1.X 解析嵌套 JSON 对象,但最新的 Retrofit 2.0 API 发生了很大变化,这在使它们适应新 API 时会令人困惑。

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

  1. 编写我自己的 JSON 转换器工厂来扩展转换器工厂 https://square.github.io/retrofit/javadoc/retrofit/Converter.Factory.html.
  2. 以 String 类型返回原始响应并自行解析。但根据我的初步研究,从 Retrofit 2.0 获得原始响应并不容易。 Retrofit 2.0 似乎坚持在将响应传递给我之前将其转换为某种内容,并且 Retrofit 不提供自己的StringConverter。 (可能是我错了~)

Update:我们实际上可以通过设置来获得原始响应JSONElement作为HTTP API接口的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
}

Note :这对于您的 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Retrofit 2.0 如何解析嵌套的 JSON 对象? 的相关文章

随机推荐

  • Postgres:在一项选择中获取最小值、最大值、聚合值

    我正在使用 Postgresql 8 4 我有一个这样的表 type value 1 5 2 6 1 4 3 10 我想写一个选择 它将给我最小值和最大值 以及所有类型的聚合integer 期望的结果应该是 min max types 4
  • SQL 连接具有特定条件的两个表

    表A结构 表B结构 上面是两个表 TableB TableARelationID是一个relationID 用于映射表A 期望的输出 期望的结果将采用 TableA RecordID 和 TableB Text 但仅采用表 B 中的类型 2
  • 在Python中不使用全局变量跟踪递归调用的数量

    如何在 Python 中不使用全局变量来跟踪递归调用的次数 例如 如何修改以下函数来跟踪调用次数 def f n if n 1 return 1 else return n f n 1 print f 5 这是一个不使用全局的巧妙技巧 您可
  • 使用 PHP Curl 发布数据并检索响应?

    我对使用网络服务非常陌生 所以我发现这很令人困惑 如果我有一个 URL 我想向其发布一些 JSON 数据 我知道如何使用 CURL PHP 方法来执行此操作 我想知道的是 如果我这样做 并且 URL 有某种服务器响应 我如何在我的 php
  • 如何选择30天的数据?

    我有疑问 SELECT name FROM SELECT name FROM Hist answer WHERE id city 34324 AND datetime gt DATE SUB CURRENT DATE INTERVAL 1
  • 如何列出导入的模块?

    如何枚举所有导入的模块 例如 我想得到 os sys 从这段代码 import os import sys import sys sys modules keys 仅获取当前模块的所有导入的近似方法是检查globals https docs
  • 来自 MDTool 的 .IPA 文件

    如何让 MDTool 为我的 MonoTouch 项目创建 IPA 文件 当我从 MonoDevelop GUI 应用程序中构建时 会创建 IPA 文件 But mdtool build configuration AppStore iPh
  • 静态文件application_可读用法

    我一直在尝试了解 application read 静态 url 处理程序字段的工作原理 我使用的是 SDK 版本 1 7 7 并且我已在开发环境中的应用程序上将其设置为 true 但我似乎无法实际读取该文件 app yaml url te
  • Scala 相当于 F# 中的 |> 或 Clojure 中的 ->>

    在 Scala 中 当我有这个表达式时 f1 f2 f3 p 有没有一种方法可以让我使用类似的东西 F p gt f3 gt f2 gt f1 还是 Clojure gt gt p f3 f2 f1 Scala 中没有相当于 F 的管道运算
  • 如何在一个 Tomcat + Apache 上部署多个 Grails 应用程序?

    我已经阅读了 StackOverflow 上的几个问题 并用 google 搜索了几个小时 但对于在一个 tomcat 5 5 使用 Apache 上部署多个 Grails 应用程序的问题 我找不到完整且清晰的答案 也许有人可以把我推向正确
  • C# 中的拳击发生

    我正在尝试收集 C 中发生装箱的所有情况 将值类型转换为System Object type struct S object box new S 将值类型转换为System ValueType type struct S System Va
  • 宽度为 100% 的 HTML 输入文本框溢出表格单元格

    有谁知道为什么宽度为 100 的输入元素会超出表格的单元格边框 在下面的简单示例中 输入框越过表格的单元格边框 结果非常糟糕 这已经过测试 并且在 Firefox IE7 和 Safari 上以相同的方式发生 这对你来说有意义吗 我错过了什
  • 为什么 Python 中不推荐使用 MutableString?

    为什么是可变字符串 http docs python org library userdict html UserString MutableStringPython 2 6 中已弃用的类 为什么它在 Python 3 中被删除了 The
  • 可变参数模板参数解包

    对于每个参数 我需要应用两个嵌套函数 obj apply someFilter arg arg is one argument but here should be an unpacking of args 我不知道如何为这种情况编写拆包
  • 比较两个 NSString 对象时如果“a == b”为 false

    我有一个带有可访问方法的类 该方法传回NSString当被叫时 MyClass getMyString 该类中的字符串变量实际上是在didSelectRowAtIndexPath 像这样的表的一部分 myString cell textLa
  • MySQL 将行值合并为单行

    我需要为表创建一个选择查询 该表合并 Number 列上每组的行 以获得包含所有可用但最新 按 ID 列的单行 这就是我的意思 我需要一张这样的表 ID Number Date 1 Date 2 Date 3 1 1 2011 10 01
  • VB.NET Array Contains 方法不起作用

    在 VB NET 中 我试图确定给定的字符串是否存在于字符串数组中 根据我的研究 数组有一个我可以使用的 包含 方法 因此代码如下所示 Dim fileTypesZ As String PDF TXT DOC DOCX XLS XLSX J
  • Swift 中的按钮文本下划线

    我有 UIButton 在界面生成器中 我将其标题设置为 属性 如何在 Swift 代码中使其标题带有下划线 IBOutlet weak var myBtn UIButton 我创建了一个在此按钮的 touchUpInside 事件上调用的
  • 将外部数据源与 Cucumber 功能文件集成

    我是 Cucumber 及其用于 BDD 的功能文件的新手 我想知道是否有任何方法可以直接给出外部数据文件 例如 CSV 文件 的文件路径 并获取用于创建测试脚本的参数值 您可以向功能添加带有参数的标签 data path data jso
  • Retrofit 2.0 如何解析嵌套的 JSON 对象?

    我们的团队决定使用改造2 0 http square github io retrofit 我正在对这个库进行一些初步研究 如标题所述 我想通过 Android 应用程序中的 Retrofit 2 0 解析一些嵌套的 JSON 对象 例如