首页 > 解决方案 > 无法解码 JSON 文件

问题描述

我正在学习 Swift/SwiftUI,但遇到了一个问题。Xcode 是这样写的:

"Expected to decode Dictionary<String, CurrencyData> but found an array instead."

这是一个代码:

import Foundation
import SwiftUI


struct CurrencyData: Codable {
    let r030: Int
    let txt: String
    let rate: Double
    let cc: String
    let exchangedate: String
}

typealias Currency = [String: CurrencyData]
import SwiftUI

 class API: ObservableObject {
    
     @Published var currencyCode: [String] = []
     @Published var priceRate: [Double] = []
     @Published var exchangeDate: [String] = []
     
     init() {
         fetchdata { (currency) in
             switch currency {
             case .success(let currency):
                 currency.forEach { (c) in
                     DispatchQueue.main.async {
                         self.currencyCode.append(c.value.cc)
                         self.priceRate.append(c.value.rate)
                         self.exchangeDate.append(c.value.exchangedate)
                }
             }
             case(.failure(let error)):
                 print("Unable to featch the currencies data", error)
         }
     }
}

     func fetchdata(completion: @escaping (Result<Currency,Error>) -> ()) {
         guard let url = URL(string: "https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?json") else { return }
         URLSession.shared.dataTask(with: url) { data, responce, error in
             if let error = error {
                 completion(.failure(error))
                 return
             }
             
             guard let safeData = data else { return }
             
             do {
                 let currency = try JSONDecoder().decode(Currency.self, from: safeData)
                 completion(.success(currency))
             }
             catch {
                 completion(.failure(error))
             }
         }
         .resume()
     }
 }
 

标签: swift

解决方案


更改类型以正确解码您收到的内容(显然是一个数组)

这应该可行,但我们无法确定答案,因为我们不知道数据。附加的 json 示例可能会有所帮助。

typealias Currency = [CurrencyData]

推荐阅读