在 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 的相关文章

随机推荐

  • 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