ios - swift中嵌套字典API的结构
问题描述
我正在尝试从 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 相同的代码,但是我认为我的结构不正确。
提前致谢!
解决方案
您的回复已更改,我尝试通过将其转换为字典数组来对其进行配置,您需要将其更改 quotes
为[String:priceStruct
]
struct Coin: Decodable {
private enum CodingKeys: String, CodingKey {
case id,rank,symbol, name, priceAUD = "quotes"
}
var id: Int
var rank: Int
var symbol : String
var name : String
var priceAUD : [String: priceStruct]
}
struct priceStruct : Decodable{
let price : Double
}
func getCoinData() {
var coins = [Coin]()
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 {
if let json = try JSONSerialization.jsonObject(with: data) as? [String: Any], let resultData = json["data"] as? [String:Any] {
let dataObject = try JSONSerialization.data(withJSONObject: resultData.values.map({$0}) , options: .prettyPrinted)
coins = try JSONDecoder().decode([Coin].self, from: dataObject)
print(coins.count)
}
} catch {
print("Error is : \n\(error)")
}
}.resume()
}
推荐阅读
- python - 如何在python中有效地将带有条件的操作(如if)应用于大型numpy数组?
- angular - Ngrx:是否可以部分使用异步管道?
- javascript - 在 Javascript 中生成对象数组的所有可能变体的列表
- excel - 检查范围中的单元格是否包含日期
- sql - SQL Server 表扫描时间是否取决于查询?
- python - 如何从 SpeechID 创建 .wav 文件,例如 3D5FFCDA-4D8B-4F2E-AE95-D86B560F4F85
- c++ - 类声明自己 (*this) 私有以避免竞争条件/放弃 gcc 中的 threadprivate
- python - 使用 for 循环创建数组时没有 else 分支的 if 语句
- node.js - TS2585:“承诺”仅指一种类型,但在此处用作值
- git - Git如何修复死的起源/主分支?