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

如何创建匹配MarketStack API嵌套JSON的Decodable结构体?

解决MarketStack API JSON解析的Decodable结构体设计问题

要正确解析MarketStack返回的嵌套JSON结构,你需要对应JSON的层级关系定义两个Decodable结构体:一个对应根对象,另一个对应data数组中的单个数据项。

步骤1:定义单个行情数据的结构体

首先创建一个结构体,用来存储data数组中每个对象里的目标字段(high和low):

struct StockData: Decodable {
    let high: Double
    let low: Double
    // 如果需要其他字段(比如date、symbol),直接添加对应的属性即可
}

步骤2:定义根响应结构体

接下来定义根结构体,对应整个JSON的结构,其中包含data数组(类型为[StockData]):

struct MarketStackResponse: Decodable {
    let data: [StockData]
    // 如果需要处理pagination信息,可以添加以下属性:
    // let pagination: Pagination
}

// 可选:如果需要解析pagination字段,补充这个结构体
struct Pagination: Decodable {
    let limit: Int
    let offset: Int
    let count: Int
    let total: Int
}

步骤3:使用JSONDecoder解析数据

拿到API返回的数据后,用JSONDecoder进行解析:

do {
    let response = try JSONDecoder().decode(MarketStackResponse.self, from: apiData)
    // 访问data数组中的第一个元素的high和low
    if let firstStock = response.data.first {
        print("最高价格: \(firstStock.high)")
        print("最低价格: \(firstStock.low)")
    }
    // 遍历所有行情数据
    for stock in response.data {
        print("High: \(stock.high), Low: \(stock.low)")
    }
} catch {
    print("解析错误: \(error)")
}

为什么你之前的写法错误?

  • 第一个ScrapeStruct直接定义high和low,但这些字段并不在JSON的根层级,而是嵌套在data数组的元素中,所以解码器找不到对应字段。
  • 第二个写法重复定义data属性,且high/low不是合法的类型(应该用Double),违反了Swift的语法和Decodable的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:15:30