ios - 将 Json 映射到 swift 对象时遇到问题
问题描述
我正在尝试将 JSON 映射到我创建的对象,但我一直遇到困难
我试着这样做
var overview: NYTimesBestsellerOverview?
guard let gitUrl = URL(string: URLConstants.BESTSELLER_LIST_OVERVIEW) else { return }
URLSession.shared.dataTask(with: gitUrl) { (data, response
, error) in
guard let data = data else { return }
do {
let decoder = JSONDecoder()
let overview = try decoder.decode(NYTimesBestsellerOverview.self, from: data)
print(overview.num_results)
} catch let err {
print("Err", err)
}
}.resume()
这是我的对象:
import Foundation
struct NYTimesBestsellerOverview: Codable {
let copyright: String
let num_results: Int
let status: String
let results: Results
enum CodingKeys: CodingKey {
case copyright
case num_results
case status
case results
}
}
struct Results: Codable {
var display_name: String
var published_date: String
let books: [Book]
enum CodingKeys: CodingKey {
case display_name
case published_date
case books
}
}
我不断收到此错误消息
Err typeMismatch(Swift.Dictionary, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "results", intValue: nil)], debugDescription: "期望解码 Dictionary 但找到了一个数组。", underlyError: nil))
解决方案
您的模型似乎有一些错误尝试使用 AppStore 中的此应用程序重新创建它:将 JSON 粘贴为代码 QuickType 它是免费的,您可以使用各种设置,您可以将所有模型变量设为可选。只需将您的 JSON 粘贴到应用程序中,您就会生成模型。请粘贴 JSON 响应的完整副本,以便我为您提供帮助。
推荐阅读
- node.js - nodejs应用程序中的管理面板和用户面板
- shell - crontab 中的启动脚本在重新启动时不起作用
- java - 如何初始化 Cloud Firestore Bean 以在所有包中使用?
- dart - 在 dart 中解析 X509 证书并提取通用名称
- google-api - 为什么我提交给 Google 用于验证 OAuth 的信息失败?
- angular - 如何获取具有相同表单控件名称的列表的值?
- android - Google 论坛短 URL 在 Android 应用程序 Webview 中不起作用
- php - 为什么 startForeground 的错误通知:java.lang.RuntimeException:在 android 版本 8 或更高版本中将图像上传到服务器时
- tableau-api - 在 Tableau 中生成饼图,显示源需求中有多少是派生需求
- python - django.db.utils.OperationalError:外键不匹配 - “project_projectpage”引用“auth_user”