Retrofit2:将带有动态键的 JSON 转换为 Map,其中 Model 也包含这些键

2024-03-15

我将 Retrofit 2 与 Gson 和 RxJava 结合使用。我的 JSON 数据看起来像这样:

{
    "groups": {
         "1": {
              "name": "First group",
              "type": "some data",
              // ... more data
         },
         "2": {
              "name": "Second group",
              "type": "some data",
              // ... more data
         },
         "3": {
              "name": "Third group",
              "type": "some data",
              // ... more data
         }
         // 4, 5, 6, etc...
    },
    // ... more data
}

在上面的示例中,“键”1、2、3 是整数,但它们也可以是唯一的字符串。我想将此 JSON 数据映射为如下所示:

public class MyData {
    @SerializedName("groups")
    private Map<String, Group> mGroups;

    // ... more data
}

public class Group {
    // TODO: This should be "1", "2", "3", etc.
    @SerializedName(???)
    private String mId;

    // This should be "First group", "Second group", "Third group", etc.
    @SerializedName("name")
    private String mName;

    // This should be "some data"
    @SerializedName("type")
    private String mType;

    // ... more data
}

将动态密钥 (1, 2, 3) 放在Group对象也是如此?我自己不托管 JSON 数据,因此无法将其更改为其他格式。


步骤 A - 创建小组课程:

public class Group {
    String name;
    String type;
}

步骤 B - 创建一个组类:

public class Groups {
    List<Group> userList;
}

步骤 C - 创建 GSON 解串器类

public class MyDeserializer implements JsonDeserializer<Groups> {
    private final String groups_key = "groups";

    @Override
    public Groups deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        Groups groups = new Groups();
        JsonObject object = json.getAsJsonObject().getAsJsonObject(groups_key);
        Map<String, Group> retMap = new Gson().fromJson(object, new TypeToken<HashMap<String, Group>>() {}.getType());

        List<Group> list = new ArrayList<Group>(retMap.values());
        groups.userList = list;

        return groups;
    }
}

步骤 D - 创建 Gson 对象时注册反序列化器

Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Groups.class, new MyDeserializer()).create();

步骤 E - 通过转换您的 JSON 对象。格森

Groups groups = gson.fromJson(jsonExmple, Groups.class);

Notes:

  • 当您的 JSON 对象变大时,您可以扩展您的组 类并添加更多变量。请记住,您需要在解串器类中反映所有内容。 :)
  • 当变量的名称与 JSON 键不同时,请使用 @SerializedName 注释
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Retrofit2:将带有动态键的 JSON 转换为 Map,其中 Model 也包含这些键 的相关文章

  • Android:WebView/BaseInputConnection 中的退格键

    我在 Android 4 2 中遇到软键盘退格问题 我在 WebView CodeMirror 中有一个自定义编辑器 它使用一个空的
  • Jetpack Compose:制作全屏(绝对定位)组件

    我怎样才能在全屏渲染树的深处制作一个可组合的 类似于Dialog可组合作品 例如 当用户单击图像时 它会显示该图像的全屏预览 而无需更改当前路线 我可以用 CSS 来做到这一点position absolute or position fi
  • 无需递归即可对可观察结果进行分页 - RxJava

    我有一个非常标准的 API 分页问题 您可以通过一些简单的递归来处理 这是一个捏造的例子 public Observable
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • 双屏 Android Studio 中不显示自动补全

    我刚刚从 Eclipse 切换到 Android Studio IntelliJ 我不明白自动补全是如何工作的 我尝试了 Control Space Control Shift Space 但没有相关建议 不在 Java 文件中 也不在布局
  • Android 操作项上的通知徽章

    我想在操作栏中放置的购物车图像上添加一个通知徽章 并以编程方式操作它 有帮助吗 您可以显示自定义MenuItem on ActionBar通过创建一个custom layout for MenuItem 要设置自定义布局 您必须使用菜单项属
  • Android Google Map V2:如何在单击另一个标记时更改先前单击的标记的图标

    更新 我通过添加 previousMarker 对象解决了性能问题 因此 只有先前单击的标记将被删除并替换为默认图标 但是 当我单击标记时 信息窗口仍然不显示 我有一个地图视图并在上面设置了一些标记 我想要的是 当我单击一个标记时 它将其图
  • 使用 Proguard 通过 Dropbox.com 库混淆 Android 应用程序

    我刚刚创建了一个需要 Dropbox com API 库的 Android 应用程序 我现在尝试在 发布 模式下构建应用程序 并希望在代码上运行混淆器以对其进行混淆 但是 每当我尝试运行 Proguard 时 都会收到以下错误 Progua
  • 类更改(例如字段添加或删除)是否保持 Serialized 的向后兼容性?

    我有一个关于 Java 序列化的问题 在这种情况下 您可能需要修改可序列化类并保持向后兼容性 我有丰富的 C 经验 所以请允许我将 Java 与 NET 进行比较 在我的Java场景中 我需要使用Java的运行时序列化机制序列化一个对象 并
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • 如何知道我的应用程序的活动计数?

    我的应用程序中有多项活动 请考虑以下案例 Activity A 调用 Activity B B 调用 C 当用户按后退键时 C 生成通知并转到 B 现在再次按后退 因此将显示 A 再次按后退键也会终止 A 并显示通知 现在 当用户按下通知图
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • onPrepareOptionsMenu 复制 ActionBar 中的项目

    当我使用 onPrepareOptionsMenu 添加菜单项时 该菜单项会在操作栏中复制其自身 我正在使用片段并在主要活动的 ActionBar 中创建初始菜单 如下所示 Override public boolean onCreateO
  • Android AppWidgetManager 方法 updateAppWidget 无法设置意图、加载数据。而且它是随机发生的

    我的小部件由 2 个按钮和一个显示数据的列表视图组成 大多数时候 当调用小部件提供程序的 onUpdate 方法时 一切都会正常加载 每个人都很高兴 但是我注意到有时在调用更新方法后 小部件完全无法加载其数据 列表视图为空 所有按钮均无响应
  • 在数组列表中过滤 Filterable 不取消之前的过滤

    我看过过滤器方法文档 其中显示调用过滤器会取消所有先前未执行的过滤请求 并发布一个稍后将执行的新过滤请求 但我收到的实际回调有些不同 在我的实现中 它不会取消先前的过滤器请求并调用publishResults 最近一次搜索条件后的上一次搜索
  • Java 的“&&”与“&”运算符

    我使用的示例来自 Java Herbert Schildt 的完整参考文献 第 12 版 Java 是 14 他给出了以下 2 个示例 如果阻止 第一个是好的 第二个是错误的 因此发表评论 public class PatternMatch
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的

随机推荐

  • 生成脚手架 ConnectionFactory 时出错

    我有一个名为 Applicant 的简单课程 我正在尝试使用实体框架添加一个模板控制器 并将 Applicant 作为我的模型类 以及一个新的数据上下文 每次我尝试创建控制器时 都会收到一个错误对话框 其中显示 无法检索 MyNameSpa
  • Internet Explorer 7 中的 @font-face 问题

    我的一个网站的 font squirrel 生成 font face 代码有问题 该字体在 Internet Explorer 7 中不显示 在其他浏览器中它工作得很好 地址是 http www mrsherskin com http ww
  • 使用 pandas 和 matplotlib 绘图

    我正在尝试用 Python 创建散点图 我有一个具有指定类别的数据框 df x 和 y 是列号 groups df groupby category fig ax plt subplots for name group in groups
  • Google + iPhone API 无需离开应用程序即可登录和共享

    我最近在我的应用程序中集成了 Google API 这很容易 我唯一的问题是 一切都需要您离开应用程序然后再回来 它使用 URL 方案 这不是我想要的行为 有没有办法直接调用他们的服务 并像在 LinkedIn API 中一样对响应执行任何
  • 太多的子进程 fork() [重复]

    这个问题在这里已经有答案了 代码 for ii 0 ii lt 24 ii switch fork case 1 printf n nproblem with fork n n exit 0 case 0 WriteOnShared Mem
  • 是否可以以有限的权限安装到程序文件中?

    我有一个将作为 MSI 包部署的应用程序 在 WiX 中编写 我正在决定是否指定elevated or limited安装程序所需的权限 除了位于 Program Files 下的默认安装位置之外 该应用程序不包含任何需要提升权限的内容 现
  • electro-forge如何指定打包的源目录?

    我已经操纵了创建反应应用程序与电子锻造app 现在我需要以某种方式指定从 CRA 生成的构建文件夹用于打包 该文件夹也应该被提供 电子锻造可以实现这样的事情吗 我知道您是在问如何告诉 electro forge 在哪个目录中找到源文件来打包
  • 无法在 FireFox 中更改 HTML5 音频标记的音量

    在本页http www metrovancouver org services solidwaste Holiday Pages Song aspx http www metrovancouver org services solidwas
  • XNA 媒体播放器快进/快退

    使用 XNA 4 0 我当前正在使用以下命令播放用户 PC XBox360 上的歌曲 Microsoft Xna Framework Media MediaPlayer Play Song song 我看到媒体播放器有一个静态属性比赛位置正
  • 如何确保 OS X 10.10 (Yosemite) 中的 Applescript 对话框焦点?

    在 OS X 10 10 Yosemite 之前 我可以通过告诉 当前应用程序 激活来确保 applescript 对话框获得焦点 tell current application activate set output to do she
  • 每当 Gem 无法在 Capistrano 中正确运行“bundle exec”时

    我在使用 Capistrano 将每当 gem 部署到我的生产环境时遇到问题 问题源于一个bundle exec whenever命令触发了一些 缺少 gem 问题 但从 shell 运行捆绑安装显示一切实际上都在那里 我的感觉是发生了两件
  • 为什么 Spring 不为关系数据库提供反应式(非阻塞)客户端?

    我用过Vert x https vertx io 用于创建反应式应用程序的工具包 支持关系数据库 例如MySQL 和 Postgres https vertx io docs vertx mysql postgresql client ja
  • C# 中日期时间更改时收到通知

    最近我正在尝试制作一个日历应用程序 它将向用户显示当前的年月日期 问题是 如果用户想让我的应用程序在第二天继续运行 我如何收到通知 我该如何更改显示的日期 我不想轮询当前日期来更新它 这在c 中可能吗 注意 我尝试过系统事件 TimeCha
  • 如何将任何类型的日期转换为 dd/mm/yyyy

    我从任何日期格式的 csv 文件接收文本 例如 dd mm yy or dd mm yyyy or mm dd yyyy or 4 may 2010 我如何转换为单一类型的格式 dd mm yyyy 我正在研究 C NET 3 5 WinF
  • MPDF 在末尾显示额外的页面

    我使用 mpdf 从 html 生成 pdf 生成的 pdf 存在一个问题 即多显示一页 如果内容在第 1 页结束 则生成 2 个页面 如果内容在第 2 页结束 则生成 3 个页面 这是我的代码
  • 用于搜索网站并提取结果的 Excel 宏

    我在工作表 1 的 A1 中有一个值 它可以是企业名称 或其关联的企业编号 当网站按编号或名称搜索时 输入需要详细信息的公司名称 或编号 后 我希望能够单击 搜索 按钮并将搜索结果显示在包含 2 列的表格中 例如工作表 1 A5 B9 标签
  • mat-error 不显示错误消息 角度 5

    问题是即使我将字段留空并移至另一个字段 也不会显示错误消息 我无法找到我在这里做错了什么 任何帮助将不胜感激 如果我在 onFormValuesChanged 上放置断点 它永远不会到达断点 我尝试过在构造函数内移动表单的构建部分 但没有任
  • 在iOS项目中使用Java库

    我正在开发一个项目 需要基于相对复杂的规则集进行业务逻辑计算 计算将在以下平台上执行 安卓应用程序 iOS app Java EE 应用程序容器 业务逻辑不依赖于任何特定于平台的细节 而是严格与 数字运算 有关 为了避免 Java 和 Ob
  • 如何在多线程游戏引擎中保持世界数据同步?

    所以我试图为我想编写的游戏创建一个简单的多线程游戏引擎 到目前为止 一切都很顺利 没有任何问题 我什至知道我必须采取什么步骤才能完成它 只有一件事我不知道 好吧 从技术上讲 我知道它的解决方案 但我希望有更优雅和更快的东西 基本上 我的引擎
  • Retrofit2:将带有动态键的 JSON 转换为 Map,其中 Model 也包含这些键

    我将 Retrofit 2 与 Gson 和 RxJava 结合使用 我的 JSON 数据看起来像这样 groups 1 name First group type some data more data 2 name Second gro