【发布时间】:2018-10-26 03:06:35
【问题描述】:
我正在尝试从 coinmarketcap API v2 导入 JSON 数据。我让它与 v1 一起工作,因为它是一个数组,但是新版本是一个字典,我不能完全让我的结构正确。 我使用的 API 是:https://api.coinmarketcap.com/v2/ticker/?convert=AUD
我的结构设置如下:
struct Coin: Decodable {
private enum CodingKeys: String, CodingKey {
case id = "rank", symbol, name, priceAUD = "quotes"
}
var id: String
var symbol : String
var name : String
var priceAUD : quoteStruct
}
struct quoteStruct{
let aud : priceStruct
}
struct priceStruct{
let price : String
}
我获取数据的代码是:
var coins = [Coin]()
func getCoinData() {
let jsonURL = "https://api.coinmarketcap.com/v2/ticker/?convert=AUD"
let url = URL(string: jsonURL)
URLSession.shared.dataTask(with: url!) { [unowned self] (data, response, error) in
guard let data = data else { return }
do {
self.coins = try JSONDecoder().decode([Coin].self, from: data)
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch {
print("Error is : \n\(error)")
}
}.resume()
}
我用于获取数据的代码与之前使用的 API 的 v1 相同,但是我认为我的结构不正确。
提前致谢!
【问题讨论】:
-
JSON 是字典,而不是数组。 “第一个”键是
data,它根本不会出现在您的解析中。你期望它如何工作?因为[Coin].self表示您将拥有Coin的数组,但事实并非如此。您的结构不会模仿 JSON 结构。 -
您的数据应该是
array而不是dictionary。如何在未定义的键上迭代字典?最好先更新您对 API 的响应。 -
谢谢大家,我最好对字典的解析做更多研究