【发布时间】:2021-11-13 09:07:31
【问题描述】:
当我从 coinapi.com (https://rest-sandbox.coinapi.io/v1/assets/?apikey=72869C8A-D49B-4DC5-9A3B-17D9804AEE97) 转换 JSON 时,我遇到了一个问题“无法读取数据,因为它的格式不正确”。
转换后的结果是:
struct CryptListStruct: Codable {
let assetID, name: String
let typeIsCrypto: Int
let dataQuoteStart, dataQuoteEnd, dataOrderbookStart, dataOrderbookEnd: String
let dataTradeStart, dataTradeEnd: String
let dataSymbolsCount: Int
let volume1HrsUsd, volume1DayUsd: Double
let volume1MthUsd: Int
let priceUsd: Double?
let idIcon, dataStart, dataEnd: String
enum CodingKeys: String, CodingKey {
case assetID = "asset_id"
case name
case typeIsCrypto = "type_is_crypto"
case dataQuoteStart = "data_quote_start"
case dataQuoteEnd = "data_quote_end"
case dataOrderbookStart = "data_orderbook_start"
case dataOrderbookEnd = "data_orderbook_end"
case dataTradeStart = "data_trade_start"
case dataTradeEnd = "data_trade_end"
case dataSymbolsCount = "data_symbols_count"
case volume1HrsUsd = "volume_1hrs_usd"
case volume1DayUsd = "volume_1day_usd"
case volume1MthUsd = "volume_1mth_usd"
case priceUsd = "price_usd"
case idIcon = "id_icon"
case dataStart = "data_start"
case dataEnd = "data_end"
}
}
我认为这是因为那里有很多数据,而且它们不一样。如何获得正确的模型?
这就是我的函数的样子:
func getCryptList(_ completion: @escaping (CryptListStruct) -> Void, _ error: @escaping (String) -> Void){
let header: [String: String] = [:]
self.get(url: "https://rest.coinapi.io/v1/assets/?apikey=367FB27A-371B-4DBD-AB81-E98AAFE857B2", header: header, completion: {
(data) in
do {
guard let data = data else {return}
let crpytList = try JSONDecoder().decode(CryptListStruct.self, from: data)
DispatchQueue.main.async {
completion(crpytList)
}
} catch let err {
error(err.localizedDescription)
}
}, error: error)
}
``
【问题讨论】:
标签: json swift jsonconvert