gpt4 book ai didi

swift - 期望解码 Array 但找到了字典

转载 作者:搜寻专家 更新时间:2023-10-30 22:24:51 24 4
gpt4 key购买 nike

我正在从返回数组的 API 中获取数据,但需要用具有“子级别”的 API 替换它:

RAW:
ETH:
USD:
TYPE: "5"
MARKET: "CCCAGG"
FROMSYMBOL: "ETH"
TOSYMBOL: "USD"
PRICE: 680.89
CHANGEPCT24HOUR : -9.313816893529749

这是我的结构:

struct Ethereum: Codable {

let percentChange24h: String
let priceUSD: String

private enum CodingKeys: String, CodingKey {
case priceUSD = "PRICE", percentChange24h = "CHANGEPCT24HOUR"
}
}

和实现:

    func fetchEthereumInfo(completion: @escaping (Ethereum?, Error?) -> Void) {
let url = URL(string: "https://min-api.cryptocompare.com/data/pricemultifull?fsyms=ETH&tsyms=USD")!

let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else { return }
do {
if let ethereumUSD = try JSONDecoder().decode([Ethereum].self, from: data).first {
print(ethereumUSD)
completion(ethereumUSD, nil)
}
} catch {
print(error)
}
}
task.resume()
}

控制台打印typeMismatch(Swift.Array<Any>, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Array<Any> but found a dictionary instead.", underlyingError: nil))

我真的不知道要在我的代码中更新什么或者这种形式的 API 是什么

最佳答案

首先,JSON 不包含任何数组。读取 JSON 非常非常容易。只有 2(两个!)集合类型,数组 [] 和字典 {}。如您所见,JSON 字符串中根本没有方括号。

任何(子)字典 {} 都必须解码成它自己的类型,所以它应该是

struct Root : Decodable {
private enum CodingKeys : String, CodingKey { case raw = "RAW" }
let raw : RAW
}

struct RAW : Decodable {
private enum CodingKeys : String, CodingKey { case eth = "ETH" }
let eth : ETH
}

struct ETH : Decodable {
private enum CodingKeys : String, CodingKey { case usd = "USD" }
let usd : USD
}

struct USD : Decodable {

private enum CodingKeys : String, CodingKey {
case type = "TYPE"
case market = "MARKET"
case price = "PRICE"
case percentChange24h = "CHANGEPCT24HOUR"
}
let type : String
let market : String
let price : Double
let percentChange24h : Double
}

要解码 JSON 并打印 percentChange24h,您必须编写

 let result = try JSONDecoder().decode(Root.self, from: data)
print("percentChange24h", result.raw.eth.usd.percentChange24h)

关于swift - 期望解码 Array<Any> 但找到了字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48007348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com