如何在 Swift 中使用未知密钥解码 JSON 响应?

2024-05-17

我想将数据拆分为https://blockchain.info/ticker https://blockchain.info/ticker这样每一行都是它自己的String在一个数组中。

我正在制作一个获取所选货币价格的应用程序。因此,如果有人想要澳元,那么它将获取数组中的第二个字符串,然后显示最后一个标签中的价格。

我目前只是让它下载 json..

func reloadJson(){
    
    if globalVariables.currencySelected == "" {
        globalVariables.currencySelected = globalVariables.currencySelected + "AUD"
    }
    print(globalVariables.currencySelected)
    
    if let blockchainTickerURL = URL(string: "https://blockchain.info/ticker") {
        
        let request = NSMutableURLRequest(url: blockchainTickerURL)
        let task = URLSession.shared.dataTask(with: request as URLRequest) {
            data, response, error in
            var message = ""
            
            if error != nil {
                print("error")
            } else {
                if let unwrappedData = data {
                    let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue)

这只是我目前拥有的内容的复制和粘贴,其格式不完全正确。

Thanks


您应该看一下 Swift4 Codable 协议。

为货币字典值创建一个符合 Codable 并具有相应属性的结构:

struct Currency: Codable {
    let fifteenM: Double
    let last: Double
    let buy: Double
    let sell: Double
    let symbol: String
    private enum CodingKeys: String, CodingKey {
        case fifteenM = "15m", last, buy, sell, symbol
    }
}

要解码 JSON 数据,您需要使用JSONDecoder传递带有自定义值的字典[String: Currency]作为要解码的类型:

let url = URL(string: "https://blockchain.info/ticker")!
URLSession.shared.dataTask(with: url) { data, response, error in
    guard let data = data else { return }
    do {
        let currencies = try JSONDecoder().decode([String: Currency].self, from: data)
        if let usd = currencies["USD"] {
            print("USD - 15m:", usd.fifteenM)
            print("USD - last:", usd.last)
            print("USD - buy:", usd.buy)
            print("USD - sell:", usd.sell)
            print("USD - symbol:", usd.symbol)
        }
    } catch { print(error) }

}.resume()

这将打印

1500 万美元:11694.03

美元 - 最后:11694.03

美元 - 买入:11695.01

美元 - 卖出:11693.04

美元 - 符号:$

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

如何在 Swift 中使用未知密钥解码 JSON 响应? 的相关文章

随机推荐

  • IE9 JSON 数据“您要打开还是保存此文件”

    开始使用 IE9 测试我的 jQuery 应用程序 看来我在这里可能遇到麻烦了 我注意到 当我将 JSON 数据返回到 Javascript 方法时 我总是收到此提示 您想打开或保存此文件吗 并为我提供了 3 个按钮 打开 保存和取消 当然
  • Angular JS - 如何在模型更改时制作动画?

    当 currentVertical 改变时 我试图做一个很好的淡出 淡入过渡 在淘汰赛中 这很简单 但我在这里无法弄清楚 请帮忙 以下代码显示一个 UL 列表 当单击 LI 元素时 该列表 绑定 到 scope currentVertica
  • 为什么使用 Create 方法而不是使用“new”?

    静态构造函数有什么优点以及什么时候适合使用 public class MyClass protected MyClass public static MyClass Create return new MyClass 然后通过创建该类的实例
  • Jenkins 管道中的 Sonarqube 质量门状态检查失败

    我是詹金斯管道脚本和声纳库的新手 如果我能就以下问题获得一些帮助 那就太好了 当质量门检查失败时 我想使 Jenkins 声明式管道作业失败 根据声纳文档 https docs sonarqube org latest analysis s
  • 如何在 Activity 之间传递值

    我创建了 3 个活动 firstActivity secondActivity and thirdActivity firstActivity是主要活动 secondActivity仅当它收到短信时才起作用 然后将消息发送到thirdAct
  • 如何命名模块而不与变量名冲突? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我发现有时很难在不与变量名冲突的情况下命名模块 例如 我有以下课程 class Petition object def init self si
  • 在 wso2 APIM 中以编程方式添加作用域

    我可以在 WSO2 APIM 中以编程方式创建范围吗 我有一个要求 用户可以通过 UI 创建新角色并将一些权限与新角色关联 用户不会使用 WSO2 Web 界面 相反 他将使用内部网络应用程序 为此 我必须以编程方式创建作用域并将 API
  • R 多元一步预测和准确性

    我想使用 R 来比较两个预测模型的 RMSE 均方根误差 第一个模型使用 1966 年至 2000 年的估计值来预测 2001 年 然后使用 1966 年至 2001 年的估计值来预测 2002 年 依此类推直至 2015 年 第二个模型使
  • 使用核心电话发送短信?

    我想开发一个像biteSMS这样的应用程序 适用于越狱的iPhone 我尝试编译一个开源应用程序iPhone 交货报告 http code google com p iphone delivery report 但无法编译它 有人知道与越狱
  • UML 图 - 在我的应用程序中发送电子邮件被视为外部系统

    我的应用程序有一个联系选项 它将打开带有按摩页面的电子邮件应用程序 并且消息接收者设置为应用程序支持电子邮件 我已附上我的意思的图片 我已将其编写为需求 但不确定如何在系统类图和用例图中说明它 我最初在用例图中所做的是 将我的用户 主要参与
  • 在 React Native 中将 Swift 事件发送到 Javascript 的正确流程

    我一直在尝试使用 Swift 构建全面的蓝牙功能 我目前陷入了如何将事件从 Swift 发送回 React Native 的困境 我尝试过this https stackoverflow com questions 31870775 rea
  • 具有多个退出点的代码段的循环复杂度

    我有这个验证密码的方法 Checks if the given password is valid param password The password to validate return code true if the passwo
  • Docker 中的 Web api 无法连接到主机上的 SQL Server,并出现登录前握手错误

    首先有一些类似的问题 但我已经尝试了我能找到的所有建议 但似乎没有任何效果 如果你能找到我没有提到的 请评论 我会尝试一下 概要是我正在尝试将 Docker 容器中的 NET Core 3 1 Web api 连接到主机上的 SQL Ser
  • Mono 在实际应用中的应用有多广泛?

    跟进评论问题here https stackoverflow com questions 3736101 what applications had better be developed in c over c in todays bus
  • Angular JS + Node JS + Passport + Spring OAuth2 身份验证/授权

    我是 PassportJS 和 AngularJS 的新手 我对如何进行此授权有疑问 我有由 Oauth2 保护的 Spring REST API 但我必须像这样一起发送用户凭据 http localhost 8080 myapp oaut
  • sys.maxunicode 是什么意思?

    CPython 根据编译选项在内部将 unicode 字符串存储为 utf 16 或 utf 32 在 utf 16 版本中 Python 字符串切片 迭代和len似乎适用于代码单元 而不是代码点 因此多字节字符的行为很奇怪 例如 在 CP
  • 当用户在 ActiveSync 中选择“文件 - 同步设置”时,如何确定更新哪个注册表设置?

    我不再确定 GuestOnly 是否确实是我需要更改的注册表项 以防止手持设备与其所连接的 PC 之间的文件同步 如果我打开 ActiveStync 的 Windows Mobile 设备中心 选择 移动设备设置 然后选择 更改内容同步设置
  • Django 不断迁移相同的外键

    我正在将现有数据库导入到它自己的 Django 项目中 我已经从数据库生成了初始模型 通过inspectdb 并且通过注释使 Django 能够一次控制每个表managed False表元设置中的行 我从简单的模型开始 在启用带有外键的表时
  • 使用 nw-gyp 构建 node-sqlite3

    我正在尝试为 node webkit 构建 sqlite3 The sqlite3 https www npmjs com package sqlite3 installing页面解释说它需要使用 nw gyp 来完成 据我了解 我应该下载
  • 如何在 Swift 中使用未知密钥解码 JSON 响应?

    我想将数据拆分为https blockchain info ticker https blockchain info ticker这样每一行都是它自己的String在一个数组中 我正在制作一个获取所选货币价格的应用程序 因此 如果有人想要澳