将json从alphavantage转换为swift对象时出现问题



我正在尝试将从网站alpha vantage接收的时间序列数据转换为Swift对象,但下面显示的错误消息阻止了它的发生。我的网络功能也能正常工作。如何解决此问题?

https://www.alphavantage.co/query?function=TIME_SERIES_MONTHLY_ADJUSTED&symbol=IBM&apikey=演示

keyNotFound(CodingKeys(stringValue: "meta", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: "meta", intValue: nil) ("meta").", underlyingError: nil))

struct TimeSeriesMonthlyAdjusted :Decodable{
let meta: Meta
let timeSeries: [String:OHLC]
}
struct Meta :Decodable{
let symbol:String
enum CodingKey:String{
case symbol = "2. Symbol"
}
}
struct OHLC : Decodable{
let open :String
let close : String
let adjustedClose: String

enum CodingKey:String{
case open = "1. open"
case close = "4. close"
case adjustedClose = "5. adjusted close"
}

}

所以有两件事(对我有效(。添加CodingKey支持TimeSeriesMonthlyAdjusted

struct TimeSeriesMonthlyAdjusted :Decodable{
enum CodingKeys:String, CodingKey {
case meta = "Meta Data"
case timeSeries = "Monthly Adjusted Time Series"
}
let meta: Meta
let timeSeries: [String:OHLC]
}

以及将所有struct的的enum CodingKey: String {...}更改为enum CodingKeys: String, CodingKey {...}

操场测试

确保将Test.json添加到游乐场中的Resources文件夹中

struct TimeSeriesMonthlyAdjusted :Decodable{
enum CodingKeys:String, CodingKey {
case meta = "Meta Data"
case timeSeries = "Monthly Adjusted Time Series"
}
let meta: Meta
let timeSeries: [String:OHLC]
}
struct Meta :Decodable{
let symbol:String
enum CodingKeys:String, CodingKey{
case symbol = "2. Symbol"
}
}
struct OHLC : Decodable{
let open :String
let close : String
let adjustedClose: String

enum CodingKeys:String, CodingKey {
case open = "1. open"
case close = "4. close"
case adjustedClose = "5. adjusted close"
}
}

do {
let data = try Data(contentsOf: Bundle.main.url(forResource: "Test", withExtension: "json")!)
try JSONDecoder().decode(TimeSeriesMonthlyAdjusted.self, from: data)
} catch let error {
error
}

您可能还想利用https://app.quicktype.io用于快速将JSON转换为Swift

最新更新