Я пытаюсь понять функцию Apple Codeable для анализа JSON. Я следую учебнику на YouTube, это код:
override func viewDidLoad() {
super.viewDidLoad()
struct Forex: Decodable {
let open: Int?
let close: Int?
let high: Int?
}
let jsonUrlString = "https://www.alphavantage.co/query?function=FX_INTRADAY&from_symbol=EUR&to_symbol=USD&interval=5min&apikey=demo"
let urlObj = URL(string: jsonUrlString)
URLSession.shared.dataTask(with: urlObj!) {(data, response, error)} in
do {
let forex = try JSONDecoder().decode([Forex].self, from: data)
} catch {
}
Когда я пытаюсь построить, я сталкиваюсь с 6 различными ошибками: Изображение ошибки
Когда я применяю предложенное исправление из XCode, оно не решает проблему, а видео человек может собрать без одной из этих ошибок.
Может ли кто-нибудь посоветовать, где я ошибся, или Apple изменила способ разбора json с помощью codeable?
В JSON вообще нет массива. Связано : stackoverflow.com/questions/51863329/…

Ваш корень - это словарь с 2 ключами по вашей попытке вам нужен ключ timeSeriesFX5Min
class VCName:UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let jsonUrlString = "https://www.alphavantage.co/query?function=FX_INTRADAY&from_symbol=EUR&to_symbol=USD&interval=5min&apikey=demo"
let urlObj = URL(string: jsonUrlString)
URLSession.shared.dataTask(with: urlObj!) {(data, response, error) in
guard let data = data else { return }
do {
let forex = try JSONDecoder().decode(Root.self, from: data)
print(forex.timeSeriesFX5Min)
} catch {
print(error)
}
}.resume()
}
}
struct Root: Codable {
let timeSeriesFX5Min: [String:Forex]
enum CodingKeys: String, CodingKey {
case timeSeriesFX5Min = "Time Series FX (5min)"
}
}
// MARK: - TimeSeriesFX5Min
struct Forex: Codable {
let the1Open, the2High, the3Low, the4Close: String
enum CodingKeys: String, CodingKey {
case the1Open = "1. open"
case the2High = "2. high"
case the3Low = "3. low"
case the4Close = "4. close"
}
}
Позвольте мне посмотреть, правильно ли я понял: вы сопоставили временной ряд с timeSeriesFX5Min, поскольку в коде не было ключевого слова, соответствующего этому, а затем сделали то же самое для открытия, максимума, минимума, закрытия. Я также понял, что вы удалили фигурную скобку } в 'ошибке) в', которая вызывала ошибки. А ключевое слово Root — это просто имя структуры или у него другая цель?
Удалите
}междуerror)иin.