在 Android 中使用 Retrofit 时带有动态键的 JSON

2023-12-27

我是新使用的Retrofit与安卓。我陷入了向REST Api并且响应有一个动态键。谁能告诉我解析的最佳方法是什么JSON像这样的东西。

{
  "Meta Data": {
    "1. Information": "Intraday (1min) prices and volumes",
    "2. Symbol": "MSFT",
    "3. Last Refreshed": "2017-12-01 16:00:00",
    "4. Interval": "1min",
    "5. Output Size": "Compact",
    "6. Time Zone": "US/Eastern"
  },
  "Time Series (1min)": {
    "2017-12-01 16:00:00": {
      "1. open": "84.2000",
      "2. high": "84.2600",
      "3. low": "84.1800",
      "4. close": "84.2000",
      "5. volume": "3311341"
    },
    "2017-12-01 15:59:00": {
      "1. open": "84.2500",
      "2. high": "84.2600",
      "3. low": "84.2000",
      "4. close": "84.2000",
      "5. volume": "175169"
    },
    "2017-12-01 15:58:00": {
      "1. open": "84.2800",
      "2. high": "84.3000",
      "3. low": "84.2400",
      "4. close": "84.2550",
      "5. volume": "139520"
    }

  }
}

如果您正在使用Retrofit那么你可以直接将其解析为某个模型测试模型根据您的要求调用类似的东西。

@GET("your endpoint")
Call<TestModel> getTestData();

在这里你会得到数据

public void getTestData(){
    mApiServiceNetwork.getNetworkService(null,WebConstants.API_ENDPOINT)
            .getTestData()
            .enqueue(new Callback<TestModel>() {
                @Override
                public void onResponse(final Call<TestModel> call, final Response<TestModel> response) {
                    if (response.code()==200){
                        //handle the response
                        TestModel testModel = response.body();
                    }else{
                        //handle the error
                    }
                }

                @Override
                public void onFailure(final Call<TestModel> call, final Throwable t) {

                }
            });
}

or

如果您正在获取数据JSON对象然后这样做。

 private TestModel getTestModel(JsonObject jsonObject){
        Gson gson = new Gson();
        TestModel  testModel = gson.fromJson(jsonObject,TestModel.class);
        return testModel;
    }

如果您要获取 String 中的数据,然后解析为 Json 对象,然后调用上面的方法,这里是将字符串转换为 json 对象的方法。

JsonObject jsonParser = new JsonParser().parse(json).getAsJsonObject();

最重要的是,对于这两种情况,您的 TestModel 应该如下所示。

public class TestModel {
@SerializedName("Meta Data")
@Expose
private MetaModel mMetaModel;

public MetaModel getMetaModel() {
    return mMetaModel;
}

public void setMetaModel(final MetaModel metaModel) {
    mMetaModel = metaModel;
}

public Map<String, TimeModel> getTimeModel() {
    return mTimeModel;
}

public void setTimeModel(final Map<String, TimeModel> timeModel) {
    mTimeModel = timeModel;
}

@SerializedName("Time Series (1min)")

@Expose
private Map<String,TimeModel> mTimeModel;

public static class MetaModel{

    @SerializedName("1. Information")
    @Expose
    private String _1Information;
    @SerializedName("2. Symbol")
    @Expose
    private String _2Symbol;
    @SerializedName("3. Last Refreshed")
    @Expose
    private String _3LastRefreshed;
    @SerializedName("4. Interval")
    @Expose
    private String _4Interval;
    @SerializedName("5. Output Size")
    @Expose
    private String _5OutputSize;
    @SerializedName("6. Time Zone")
    @Expose
    private String _6TimeZone;

    public String get_1Information() {
        return _1Information;
    }

    public void set_1Information(final String _1Information) {
        this._1Information = _1Information;
    }

    public String get_2Symbol() {
        return _2Symbol;
    }

    public void set_2Symbol(final String _2Symbol) {
        this._2Symbol = _2Symbol;
    }

    public String get_3LastRefreshed() {
        return _3LastRefreshed;
    }

    public void set_3LastRefreshed(final String _3LastRefreshed) {
        this._3LastRefreshed = _3LastRefreshed;
    }

    public String get_4Interval() {
        return _4Interval;
    }

    public void set_4Interval(final String _4Interval) {
        this._4Interval = _4Interval;
    }

    public String get_5OutputSize() {
        return _5OutputSize;
    }

    public void set_5OutputSize(final String _5OutputSize) {
        this._5OutputSize = _5OutputSize;
    }

    public String get_6TimeZone() {
        return _6TimeZone;
    }

    public void set_6TimeZone(final String _6TimeZone) {
        this._6TimeZone = _6TimeZone;
    }
}
public static class TimeModel{
    @SerializedName("1. open")
    @Expose
    private String _1Open;
    @SerializedName("2. high")
    @Expose
    private String _2High;
    @SerializedName("3. low")
    @Expose
    private String _3Low;
    @SerializedName("4. close")
    @Expose
    private String _4Close;
    @SerializedName("5. volume")
    @Expose
    private String _5Volume;

    public String get_1Open() {
        return _1Open;
    }

    public void set_1Open(final String _1Open) {
        this._1Open = _1Open;
    }

    public String get_2High() {
        return _2High;
    }

    public void set_2High(final String _2High) {
        this._2High = _2High;
    }

    public String get_3Low() {
        return _3Low;
    }

    public void set_3Low(final String _3Low) {
        this._3Low = _3Low;
    }

    public String get_4Close() {
        return _4Close;
    }

    public void set_4Close(final String _4Close) {
        this._4Close = _4Close;
    }

    public String get_5Volume() {
        return _5Volume;
    }

    public void set_5Volume(final String _5Volume) {
        this._5Volume = _5Volume;
    }
}

}

关键点是我们是否进行改造Map<K,V>如果模型与 JSON 中的一样,它会自动将其解析为模型。

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

在 Android 中使用 Retrofit 时带有动态键的 JSON 的相关文章

  • 使用 Javascript/Node.js 在代码内执行 mongoimport

    node js javascript 中是否有任何库可供个人使用mongoimport在代码中 据我了解 mongoimport 有点像 exe 您必须先执行它 然后才能使用其文本输入环境 是否可以在我的代码中执行 mongoimport
  • 如何将 Android 添加到 Phonegap 平台版本 3

    经过大量挖掘 我相信这个问题 https stackoverflow com questions 18423444 phonegap 3 doesnt work with andriod studio与我没有添加任何用于构建phonegap
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • Play.application() 的替代方案是什么

    我是 Play 框架的新手 我想读取conf文件夹中的一个文件 所以我用了Play application classloader getResources Data json nextElement getFile 但我知道 play P
  • Java - 从 XML 文件读取注释

    我必须从 XML 文件中提取注释 我找不到使用 JDOM 或其他东西来让它们使用的方法 目前我使用 Regex 和 FileReader 但我不认为这是正确的方法 您可以使用 JDOM 之类的东西从 XML 文件中获取注释吗 或者它仅限于元
  • 哪个视图最亮?

    在Android中 哪个是轻量级视图 例如 View Textview Edittext 等 在某些情况下 我们需要使用视图来填充区域而不向用户显示视图 同时屏幕加载速度应该很快 您可以使用空间 android widget Space S
  • 如何从 Ant 启动聚合 jetty-server JAR?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • 受信任的网络活动 - 地址栏不隐藏(Android 72 的 Chrome)

    我已经关注了this https developers google com web updates 2017 10 using twa了解如何使用受信任的 Web 活动的指南 一切正常 但地址栏仍然出现 一开始我认为这是因为当应用程序正在
  • 如何将样式应用于我拥有的所有 TextView? [复制]

    这个问题在这里已经有答案了 可能的重复 设计所有 TextView 或自定义视图 的样式 而不向每个 TextView 添加样式属性 https stackoverflow com questions 6801890 styling all
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • 如何更改操作栏背景和文本颜色

    我正在使用本教程中的导航抽屉 http www androidhive info 2013 11 android sliding menu using navigation drawer http www androidhive info
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级
  • 从文件路径显示图像视图?

    我需要仅使用文件名而不是资源 ID 来显示图像 ImageView imgView new ImageView this imgView setBackgroundResource R drawable img1 我在可绘制文件夹中有图像
  • 如何(安全)将 Python 对象发送到我的 Flask API?

    我目前正在尝试构建一个 Flask Web API 它能够在 POST 请求中接收 python 对象 我使用 Python 3 7 1 创建请求 使用 Python 2 7 运行 API 该 API 设置为在我的本地计算机上运行 我试图发
  • Android GetPTLAFormat 上的 Phonegap 错误

    我们正在开发一个使用 jQuery 移动和电话间隙的应用程序 一切似乎都工作正常 但是当在连接的 Android 手机上运行应用程序时 我们在 Eclipse logcat 中看到大量类似这样的错误 0 GetPTLAFormat inva

随机推荐

  • Jetpack Compose BottomNavBar 标签重叠 图标

    我试图实现 jetpack compose 底部导航栏 但我遇到了这个问题 每当标签没有足够的空间时 它就会与图标重叠 我错过了什么吗 有没有自动截断或缩小文本之类的解决方案 compose version 1 0 0 beta09 My
  • pyinstaller-frozen .exe 的“tcl\encoding\ascii.enc 无法提取” - Windows

    使用 pyinstaller 冻结为 exe 的 Python 2 7 脚本已在许多不同 Windows 网络上的许多用户成功运行了几个月 今天早上 一个 Windows 网络上的一组用户 并且只有这三个用户 并且只有这个办公室 之前已成功
  • JavaScript Cookie

    我有该域的 cookie forum mywebsite com并为 mywebsite com 是否可以读取 cookie mywebsite com带有 javascript 的域forum mywebsite com地点 是的 你应该
  • 在控制台中收到大量“内容安全策略”警告 (Firefox)

    我正在使用 Firefox 并且在控制台中收到很多 内容安全策略 警告 包括 内容安全策略 页面的设置阻止加载内联资源 script src and 内容安全策略 忽略 script src 或 style src 中的 unsafe in
  • 如何在 Go 中发送带附件的电子邮件

    我找到了这个库 并设法在空电子邮件中发送附件 但没有合并文本和附件 https github com sloonz go mime message https github com sloonz go mime message 如何做呢 我
  • Android 应用程序可以将自己呈现为(虚拟)Matter 设备吗?

    是否可以创建一个将自身呈现为 Matter 设备的 Android 应用程序 例如温度计 有示例代码吗 Android 应用程序可能无法做到这一点 因为它无法始终按需监听外部通信 您可以寻找在 Android 系统上运行本地服务器并以这种方
  • 如何控制 Android 工具栏中的菜单位置

    我想改变 android xml 代码中膨胀菜单项的重力 但我找不到任何属性来解决问题 我想要其中的一个项目left侧面和另一个项目right角的一侧在Toolbar 你们有什么想法吗 这是我现在的状态 这是我的菜单 xml menu me
  • rstudio 到命令行 R 的不同库路径 (`$R_LIBS_USER`)

    我正在尝试找出为什么我的 libPath命令行 R 和 RStudio 之间的不同Desktop 注 这是not的副本这个问题 https stackoverflow com questions 7129213 r libpaths dif
  • 如何在 Haskell 的 GI-Gtk 中将 Widget 转换为 Label?

    我有这个示例代码 其中有一个包含 ListBoxRows 的 ListBox 而 ListBoxRows 又包含一个 Label 当我单击 ListBox 时 我得到一个 ListBoxRow 到目前为止 一切都很好 当我想与 ListBo
  • 类型错误:db.collection 不是函数,无法获取

    我正在尝试从中获取一些数据apiRoutes get resources productinfo name 我有这个错误 我不知道出了什么问题 还有apiRoutes get book title 似乎不起作用 我不知道我做错了什么 更新
  • CommandManager.RequerySuggested 如何工作?

    MSDN 仅指出 当 CommandManager 检测到可能改变命令执行能力的条件时发生 然而我似乎找不到任何关于它是如何工作的痕迹 我应该知道 避免什么等等 它只是监听输入吗 即 鼠标移动 按下按键等 我无法准确告诉你发生了什么事件Co
  • 添加到自定义 ActionLink 帮助程序扩展的 htmlAttributes

    我正在尝试创建 Html ActionLink HtmlHelper 的简单自定义版本 我想将一组额外的属性附加到传入的 htmlAttributes 匿名对象中 public static MvcHtmlString NoFollowAc
  • 选择中的 VBA Rows.Count

    我正在计算用户选择在操作按钮旁边的工作表顶部显示的行数 即按钮显示 生成电子邮件 旁边显示 已选择 x 个项目 由于每次选择更改时都会更新 因此我有以下代码 Private Sub Worksheet SelectionChange ByV
  • 如何获取多语言的维基百科页面?

    我怎样才能获得另一种语言的相同维基百科页面 例如我想获得日语页面 http en wikipedia org wiki Cloud http en wikipedia org wiki Cloud 结果是 http ja wikipedia
  • 释放 Windows 文件共享锁

    这个问题在工作中时不时就会出现 我们的构建机器可以通过普通的 Windows 文件共享访问其文件 如果有人远程浏览计算机上的文件夹 并将窗口打开过夜 则构建会失败 就像现在所做的那样 左侧打开的资源管理器窗口指向源树中的子文件夹之一 构建会
  • Rails 3 从另一个控制器渲染部分内容(错误:ActionView::MissingTemplate)

    我试图在 application html erb 的标头中包含登录名 用户名 密码 我收到此错误 Missing partial login with handlers gt rjs builder rhtml erb rxml loca
  • kafka-console-consumer 使用什么消费组

    当我像这样运行 kafka console consumer 时 bin kafka console consumer sh bootstrap server localhost 9092 topic test 它默认属于哪个消费群体 如果
  • SQL 获取未参与项目的姓名

    我想检索未参与 PostgreSQL 项目的人员姓名 我有一张名为employees和他们的names and ssn 我的第二张桌子叫做works on并包括ssn and project number ssn这里有一个foreign k
  • Python 'sys.argv' 的最大参数数量有限制吗?

    我有一个Python脚本需要处理大量文件 为了解决 Linux 对可传递给命令的参数数量相对较小的限制 我使用find print0 with xargs 0 我知道另一种选择是使用 Python 的 glob 模块 但是当我有更高级的模块
  • 在 Android 中使用 Retrofit 时带有动态键的 JSON

    我是新使用的Retrofit与安卓 我陷入了向REST Api并且响应有一个动态键 谁能告诉我解析的最佳方法是什么JSON像这样的东西 Meta Data 1 Information Intraday 1min prices and vol