json - Swift 与 WHMCS API 交互
问题描述
我正在开发一个 Swift 应用程序来与我当前在生产服务器中运行的 WHMCS API 软件进行交互。但是在尝试捕获并执行 json 解码时,我遇到了这个调试错误消息:
keyNotFound(CodingKeys(stringValue: "userid", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: \"userid\", intValue: nil) (\"userid\").", underlyingError: nil))
涉及的代码是:
import Foundation
class NetworkManager {
@Published var posts = [Results]()
var privatedata = Credentials()
func fetchData(email: String, password2:String, action: String) {
switch action {
case "ValidateLogin":
if let url = URL(string: "https://XXXXXX.server/includes/api.php?action=\(action)?email=\(email)&password2=\(password2)&username=\(privatedata.api_id)&password=\(privatedata.api_secret)&responsetype=json") {
let session = URLSession(configuration: .default)
let task = session.dataTask(with: url) { (data, response, error) in
if error == nil {
let decoder = JSONDecoder()
if let safeData = data {
do {
let results = try decoder.decode(PostData.self, from: safeData)
DispatchQueue.main.async {
// posts.self = results.self
}
print(results.result)
} catch {
print(error)
}
}
} else { print("error: \(String(describing: error))")}
}
task.resume()
}
default:
print("Error in switch statement")
}
}
}
关于如何进行此运行的任何想法?提前致谢
解决方案
您很可能userid
在模型中定义了这样的属性PostData
:
struct PostData: Codable {
var userid: Int
}
显然,此属性在您的响应 JSON 中不存在或具有null
价值。也许您应该将此属性定义为可选的,如下所示:
struct PostData: Codable {
var userid: Int?
}
推荐阅读
- c# - 无效 JSON 原始绘制的数据表问题
- google-maps - 地理编码 api 有多少请求是免费的?
- excel - 如何遍历高级筛选器中的条件?
- testing - 西葫芦 - 运行测试的问题
- kubernetes - 在 kubernetes 中使用 RDS 而不是 mysql 容器
- c# - 当没有检查的异常时如何在 C# 中预测异常
- c# - String.Format 为相同的代码返回不同的枚举值。如果我在枚举中添加超过 45 个字段
- wordpress - 我想更改礼品卡文字我应该如何覆盖它
- java - Spring boot项目如何保存DB用户名和密码
- javascript - awaitMessages 在我运行它时没有接受我的输入。我正在尝试使用 node.js 和 discord.js 制作一个不和谐的机器人