gpt4 book ai didi

json - 无法解析通用 Codable

转载 作者:行者123 更新时间:2023-11-28 14:17:45 25 4
gpt4 key购买 nike

我正在使用通用编码器来传递网络响应。我创建了以下函数来解码数据并返回结果:

这是该函数的一部分:

 guard let jsonDataUnwrapped = jsonData,
let result: ServerResponse<T> = try? JSONDecoder().decode(ServerResponse<T>.self, from: jsonDataUnwrapped) else {
completionHandler(.error(APIError.init(type: .parsingError)))
return
}

ServerResponse 中的代码:

struct ServerResponse<T: Codable> : Codable {
var response: T
var errors: [ServerError]
}

struct ServerError : Codable {
var code: Int
var message: String
}

在 Codable 类中,我正在这样做:

init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
email = try values.decodeIfPresent(String.self, forKey: .email)
firstName = try values.decodeIfPresent(String.self, forKey: .firstName)
lastName = try values.decodeIfPresent(String.self, forKey: .lastName)
phoneNumber = try values.decode(String.self, forKey: .phoneNumber)
if let status = try values.decodeIfPresent(String.self, forKey: .accountStatus) {
accountStatus = UserStatus(rawValue: status)!
}
}

当我在响应键中获取数据时,这段代码工作正常。但在某些情况下,我也会得到空的响应键并出现一些错误:

{
"response": {},
"errors": [
{
"code": "104",
"message": "Authentication failed"
}
]
}

当我得到空响应时,我需要错误数组,但我无法得到它。

最佳答案

如果您还添加了收到的错误消息,那将非常有帮助,但查看代码很明显

Expected to decode Int but found a string/data instead.

在 JSON 中,双引号中的一切都是String,甚至是"104""false"

struct ServerError : Codable {
let code: String
let message: String
}

这与问题无关,但将结构成员声明为常量 (let),因为您不会改变它们。

关于json - 无法解析通用 Codable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52094949/

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