You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SwiftUI中为Alpha Vantage加密货币API的JSON数据创建对应变量

你调用的API没有问题,解析失败是因为返回的JSON是多层嵌套结构,且包含动态key的时间序列节点,你之前定义的单层结构体没有匹配对应的结构,正确的分层结构体定义如下:

1. 分层定义Codable结构体

import Foundation

// 最内层:单条时间点的K线数据
struct CryptoKlineItem: Codable {
    let open: String
    let high: String
    let low: String
    let close: String
    let volume: Int
    
    // 映射JSON中带编号的key
    enum CodingKeys: String, CodingKey {
        case open = "1. open"
        case high = "2. high"
        case low = "3. low"
        case close = "4. close"
        case volume = "5. volume"
    }
}

// 元数据结构体:存储币种、间隔、市场等基础信息
struct CryptoMetaData: Codable {
    let symbol: String
    let currencyName: String
    let marketCode: String
    let interval: String
    let lastRefreshed: String
    let timeZone: String
    
    enum CodingKeys: String, CodingKey {
        case symbol = "2. Digital Currency Code"
        case currencyName = "3. Digital Currency Name"
        case marketCode = "4. Market Code"
        case interval = "7. Interval"
        case lastRefreshed = "6. Last Refreshed"
        case timeZone = "9. Time Zone"
    }
}

// 最外层:完整API响应结构
struct CryptoIntradayResponse: Codable {
    let metaData: CryptoMetaData
    // 时间序列是动态时间字符串为key的字典,匹配不同时间间隔的节点名
    let timeSeries: [String: CryptoKlineItem]
    
    enum CodingKeys: String, CodingKey {
        case metaData = "Meta Data"
        case timeSeries = "Time Series Crypto (5min)"
    }
}

2. 字段获取方式

  • 你需要的interval、币种、市场等信息直接从CryptoIntradayResponse的metaData属性中读取即可
  • 所有时间点的open/high/low/close(即你说的price)数据,遍历timeSeries字典的value即可获取,字典的key为对应K线的时间戳

注意事项

如果需要适配不同时间间隔的请求(比如1min、15min),可以把最外层CodingKeys里的timeSeries的rawValue改成动态拼接的参数,不需要重复定义结构体。


内容的提问来源于stack exchange,提问作者Wens Music

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:54:04