如何在尝试解码JSON时修复Xcode中的错误“不匹配”

问题描述

我是Swift语言的新手,我试图在Xcode中构建一个简单的JSON解析应用。

这是我得到的错误 typeMismatch(Swift.Double,Swift.DecodingError.Context(codingPath:[CodingKeys(stringValue:“ Date”,intValue:nil)]],debugDescription:“预期解码Double,但找到了一个字符串/数据。”,底层错误:nil))

这是一个要解析的链接 https://www.cbr-xml-daily.ru/daily_json.js

我有什么模型:(我使用https://app.quicktype.io来创建它)

struct Welcome: Codable {
    var date,prevIoUsDate: Date
    var prevIoUsURL: String
    var timestamp: Date
    var valute: [String: Valute]

    enum CodingKeys: String,CodingKey {
        case date = "Date"
        case prevIoUsDate = "PrevIoUsDate"
        case prevIoUsURL = "PrevIoUsURL"
        case timestamp = "Timestamp"
        case valute = "Valute"
    }
}

struct Valute: Codable {
    var id,numCode,charCode: String
    var nominal: Int
    var name: String
    var value,prevIoUs: Double

    enum CodingKeys: String,CodingKey {
        case id = "ID"
        case numCode = "NumCode"
        case charCode = "CharCode"
        case nominal = "Nominal"
        case name = "Name"
        case value = "Value"
        case prevIoUs = "PrevIoUs"
    }
}

以下是用于解析和解码的代码

func request(urlString: String,completion: @escaping (Welcome?,Error?) -> Void) {
    guard let url = URL(string: urlString) else { return }
    
    URLSession.shared.dataTask(with: url) { (data,response,error) in
        if let error = error {
            print("Some error")
            completion(nil,error)
            return
        } else {
            guard let data = data else { return }
            do {
                let welcome = try JSONDecoder().decode(Welcome.self,from: data)
                completion(welcome,nil)
            } catch let jsonError {
                print("Failed to decode JSON: \(jsonError)")
                completion(nil,jsonError)
            }
            
        }
    } .resume()
}

真的很感谢您的帮助/建议。

解决方法

这是因为您没有正确解码n = 2 disc_weights = np.random.uniform(0,2 * np.pi,4*n) iter_ = itertools.product('XYZ',range(n)) tuple_wrapper = lambda t: f'{t[0]}{t[1]}' sum_ = 0.0 * QubitOperator('') for dw in disc_weights: try: sum_ += dw * QubitOperator(tuple_wrapper(next(iter_))) except StopIteration: sum_ += dw * QubitOperator('')

尝试为Date设置dateDecodingStrategy

JSONDecoder