使用 swift Codable 从 JSON 数组中提取数据

2024-01-18

我有一个像这样的 JSON 响应:

我目前设计的可解码结构如下:

    struct PortfolioResponseModel: Decodable {
    var dataset: Dataset

    struct Dataset: Decodable {
        var data: Array<PortfolioData> //I cannot use [Any] here...

        struct PortfolioData: Decodable {
            //how to extract this data ?
        }
    }
   }

问题是,如何提取数组内的数据,数组的值可以是 Double 或 String。

以下是在 Playground 上执行此操作的示例字符串:

   let myJSONArray =
   """
   {
   "dataset": {
   "data": [
    [
   "2018-01-19",
   181.29
   ],
   [
   "2018-01-18",
   179.8
   ],
   [
   "2018-01-17",
   177.6
   ],
   [
   "2018-01-16",
   178.39
   ]
   ]
   }
   }
   """

提取数据:

do {
    let details2: PortfolioResponseModel = try JSONDecoder().decode(PortfolioResponseModel.self, from: myJSONArray.data(using: .utf8)!)
    //print(details2) 
    //print(details2.dataset.data[0]) //somehow get "2018-01-19"

} catch {
    print(error)
}

我不能在这里使用[Any]。

切勿使用Any解码 JSON 时,因为通常您确实知道内容的类型。

要解码数组,您必须使用unkeyedContainer并对系列值进行解码

struct PortfolioResponseModel: Decodable {
    var dataset: Dataset

    struct Dataset: Decodable {
        var data: [PortfolioData]

        struct PortfolioData: Decodable {
            let date : String
            let value : Double

            init(from decoder: Decoder) throws {
                var container = try decoder.unkeyedContainer()
                date = try container.decode(String.self)
                value = try container.decode(Double.self)
            }
        }
    }
}

您甚至可以将日期字符串解码为Date

struct PortfolioData: Decodable {
    let date : Date
    let value : Double

    init(from decoder: Decoder) throws {
        var container = try decoder.unkeyedContainer()
        date = try container.decode(Date.self)
        value = try container.decode(Double.self)
    }
}

如果您向解码器添加日期格式化程序

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(formatter)
let details2 = try decoder.decode(PortfolioResponseModel.self, from: Data(myJSONArray.utf8))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 swift Codable 从 JSON 数组中提取数据 的相关文章

  • 使用来自Processing-JS的JSON

    我想使用编写一个应用程序处理 JS http processingjs org 并且我希望能够使用服务器端数据加载它 我还没有编写服务器端 所以我可以使用任何东西 但似乎明显的 AJAX 事情是使用 JSON 将数据上传到页面中 如何从我的
  • 如何在 json 中输出 javascript 日期

    我正在尝试时间线图表 http code google com apis visualization documentation gallery annotatedtimeline html Data Format http code go
  • 带有自定义 init 的 SwiftUI 视图

    假设我正在制作一个如下所示的自定义输入元素 struct CustomInput View Binding var text String var name String var body some View TextField name
  • 是否可以对 UILabel 的文本颜色变化进行动画处理? [复制]

    这个问题在这里已经有答案了 UIView animateWithDuration 5 animations myLabel textColor UIColor redColor 标签文本颜色立即改变 Try this UIView tran
  • 如何在 Swift 中使用 deltaTime 正确计算 1 秒

    我正在尝试计算经过的秒数deltaTime但我不知道该怎么做 因为我的deltaTime不断打印 0 0166 或 0 0167 这是我的代码 override func update currentTime CFTimeInterval
  • 在 Mono 中反序列化 JSON 数据

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

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • 在 Swift 中,如何为具有自动布局的 UIView 制作动画,就像页面滑入一样?

    我尝试创建一个 UIView 来表示一个大小与设备屏幕相同的页面 由于该应用程序支持方向 因此我使用 AutoLayout 来构建它 它工作正常 直到我尝试将页面动画化以从右侧滑入 经过一番研究后 我能想到的最好的办法是 myView UI
  • 如何(安全)将 Python 对象发送到我的 Flask API?

    我目前正在尝试构建一个 Flask Web API 它能够在 POST 请求中接收 python 对象 我使用 Python 3 7 1 创建请求 使用 Python 2 7 运行 API 该 API 设置为在我的本地计算机上运行 我试图发
  • 在 Swift 中将时间数组从 24 小时转换为 12 小时

    我有一个像这样的数组 arrayTimes 16 00 16 30 17 00 17 30 18 00 18 30 我想将数组从 24 小时转换为 12 小时 这是我到目前为止所拥有的 它转换数组中的第一个数字 我遗漏了一些东西 但我无法解
  • 带有预填充 .sqlite 的核心数据 (Swift3)

    目前 我正在对现有 iOS9 应用程序进行 Swift3 iOS10 更新 该应用程序存储了欧洲各地约 10 000 个电动汽车充电点 到目前为止 我总是为应用程序提供预填充的数据库 xcappdata 包中的 sqlite sqlite
  • 调整框大小后没有获取 gridster 序列化数据

    我试图在更改框的大小和位置后获取序列化数据 但我只得到加载详细信息 调整框大小后如何获取序列化数据 我还想获取框中的文本 框中的值 这是我的代码 function var gridster gridster gt ul gridster w
  • QR 码限制

    我必须生成带有自定义字段的代码 id of field name of field values领域的 我可以在 QRcode 中编码的数据多长 我需要知道可以插入多少个字段 值 我应该使用 XML JSON 还是 CSV 什么是最通用和最
  • 从 json 数组中获取成对的值

    首先 这是我从 php 源获取的 json 值 oid 2 cid 107 oid 4 cid 98 oid 4 cid 99 之后 我想要得到并且oid值以及相应的cid值例如 oid 2 and cid 107一口气 oid 4 and
  • 如何指定输出可执行文件的名称?

    默认情况下 SPM 会构建与包含其模块文件夹同名 大写 的可执行目标 main swift 如何让它使用不同的文件名构建二进制文件 我找不到任何说明SPM手册 https github com apple swift package man
  • 快速不平衡调用开始/结束外观转换

    这已经困扰我一段时间了 我有一个UISplitViewController里面一个UITabBarController 主视图是一个TableView 当我单击一个单元格时 我会弹出一个非常基本的视图控制器 其中只有一个UIButton居中
  • 使用 AFNetworking 2.0 发布 JSON 数据

    我有一个 Web 脚本 它通过 HTTP POST 请求接受 JSON 字符串作为输入 我遇到过几个相同的 AFNetworking 1 x 示例 任何人都可以指出我或提供 AFNetworking 2 0 示例 以对使用格式化 JSON
  • 如何取消 Alamofire.upload

    我正在通过以下方式将图像上传到服务器上Alamofire upload作为多部分数据 不像Alamofire request它没有回来Request对象 我通常用它来取消请求 但是能够取消上传这样的消耗性请求是非常合理的 阿拉莫菲尔有哪些选
  • 如何实现pickerView类的didSelectRow方法?

    我以前从未使用过选择器视图 我认为它类似于表视图类的 func tableView tableView UITableView didDeselectRowAtIndexPath indexPath NSIndexPath 方法 但是我无法
  • 如何以编程方式添加 NSMenu?

    我没有使用storyboard和xib 只使用了代码 我想以编程方式添加 编辑 菜单 我的问题是 1 如何显示 编辑 菜单 评论问题1 需要输入什么代码 2 Swift 提供了复制和粘贴等操作吗 class TestManager NSOb

随机推荐

  • 阿拉伯字符“??????”关于 php 和 mysql [重复]

    这个问题在这里已经有答案了 这是我的问题 我有一个阿拉伯数据库 mysqli UTF8 general ci 并且我的 php 文件的字符集是 UTF 8 当我出售数据时 我得到 在 php 上 我的管理员我可以毫无问题地写入和读取 在 p
  • Django 模型主键作为一对

    我正在尝试制作一个应用程序 用户可以登录他们的个人资料并将歌曲添加到他们最喜欢的列表中 我为此定义了 M2M 关系 我的问题是如何说 歌曲 歌手 的组合是独特的 我搜索了一下 发现通过unique together也许可以 这是设置的正确方
  • 使用 LEFT JOIN 删除

    我想根据引用第一个表的另一个表中存在的数据从表中删除 但是 当我将其作为 SELECT stetement 运行时 我有有效的代码并显示要删除的值 但是当我将其更改为删除它给了我错误 我不明白它们为什么在那里 DELETE leadCust
  • 如何使用facet_wrap在每个方面具有不同数字的离散类别之间创建相等的距离

    我的目标是使图中所有国家之间的距离大致相等 例如 在第一类中 Increase 国家分散 另一方面 第二类和第三类国家彼此距离太近 这迫使我减小国家文本的大小 例如 IS UK 和绘制的估计值 例如 1 5 1 2 因此 一旦我将此文件提取
  • GCE Kubernetes 会话持久化

    我正在 GCE Kubernetes 上运行一个 wordpress woocommerce 网站 但由于会话持久性而在扩展时遇到问题 LoadBalancer GCE Ingress 将所有流量发送到反向代理 然后反向代理将流量发送到我设
  • 在 Scala 中将列表[Try[A]] 转换为列表[A]

    我想从输入数据中过滤掉错误的输入 我目前正在使用scala util Try包装任何异常 下面是一个简单的例子 其中 3I 抛出一个NumberFormatException 我想知道在 Scala 中是否有更好的方法来做到这一点 val
  • OpenGL 和 QtQuick 纹理问题

    我正在基于 Qt 附带的 openglunderqml 示例在 C 中开发一个简单的 QQuickItem 实现 我做了一些修改以使用不同的着色器和加载的两个纹理 这个想法是着色器将在两个纹理之间交叉淡入淡出 本质上只是我加载到纹理中的图像
  • Flutter Web:堆栈和耀斑问题

    我试图在 Flutter Web 开发频道 v1 13 2 上创建一个简单的网页 但出现了这个奇怪的问题 当我尝试在堆栈小部件中放置耀斑动画时 该堆栈小部件分别有 2 个附加小部件 一个背景和一个居中文本 耀斑似乎没有出现 但是当我移除背景
  • 如何将 8 个打包的 32 位整数(在 __m256i 中)的 +-1 符号打包为 64 位整数的字节?

    给定一个 m256i打包 32 位有符号整数的价值 如何获取每个字节所在的单个 64 位数字1如果原始的相应 32 位有符号整数 m256i大于或等于0 并得到 1如果该 32 位整数是负数 AVX2 可能还有 AVX512 很有趣 这是另
  • Jenkins 要求接受 TFS EULA

    我在 Jenkins 上创建了一个附加到 TFS 服务器的构建作业 我使用 Team Explorer Everywhere 来促进这一点 我第一次运行该作业时 收到以下消息 Error You must accept the End Us
  • 如何使用 Express.js 指定 HTTP 错误代码?

    我努力了 app get function req res next var e new Error error message e status 400 next e and app get function req res next r
  • FIND_IN_SET 有两个字符串

    我有这个员工列表的员工表 ID EMPLOYEE ID SKILLS 1 1 3 4 2 2 3 5 2 3 3 1 5 和列
  • ARC Welder 打包的 Android 应用程序只能在 Chrome 操作系统上使用吗?

    如果我使用 Google ARC Welder 打包 Android 应用程序并通过 Chrome 网上应用店分发它 它是否适用于 Windows Mac Linux 还是仅适用于 Chrome 操作系统 如果是这样 有什么消息表明这种情况
  • 使用 openssl C 进行 AES(aes-cbc-128、aes-cbc-192、aes-cbc-256)加密/解密

    我只想用这 3 种模式测试 openSSL 的 AES 密钥长度为 128 192 和 256 但我的解密文本与我的输入不同 我不知道为什么 另外 当我传递一个巨大的输入长度 比方说 1024 字节 时 我的程序显示core dumped
  • 如何在张量流中实现多元线性随机梯度下降算法?

    我从单变量线性梯度下降的简单实现开始 但不知道将其扩展到多元随机梯度下降算法 单变量线性回归 import tensorflow as tf import numpy as np create random data x data np r
  • 我什么时候应该在 scanf() 中使用 & 符号

    在c中使用 符号时使用的规则是什么scanf struct Student char name 20 int id int main void struct Student std1 printf enter name and id of
  • 查看 Azure KeyVault 中 Secret 的内容

    这似乎是一个非常基本的问题 但我在 Azure 中创建了一个 KeyVault 并向其中添加了两个 Secret 它们是使用以下方法保护的纯文本 hello world 示例ConvertTo SecureString Using Get
  • gdb 'x' 命令有什么作用?

    在我寻求更多地了解计算机的一般知识时 我偶然发现了一本书 其中有一些关于反汇编 x86 汇编语言以及 C 和 x86 汇编之间的关系的章节 现在我一直在读这个GDB命令 但我无法完全理解它 该命令及其结果如下 gdb x 32xw esp
  • 分类:类内数据倾斜

    我正在尝试构建一个多标签分类器来预测某些输入数据为 0 或 1 的概率 我正在使用神经网络和 Tensorflow Keras 稍后可能是 CNN 问题如下 数据存在很大偏差 负面例子比正面例子多得多 大概是90 10 所以我的神经网络几乎
  • 使用 swift Codable 从 JSON 数组中提取数据

    我有一个像这样的 JSON 响应 我目前设计的可解码结构如下 struct PortfolioResponseModel Decodable var dataset Dataset struct Dataset Decodable var