Json Swift无法读取数据’;因为它是’;格式正确
我是swift的新手,正在尝试找出如何将JSON解析为结构。我正在尝试从NASA Mar的漫游者照片中获取图像。我正在尝试在线学习教程,但似乎无法解决此问题。我做错了什么 错误: 致命错误:无法读取数据,因为它的格式不正确Json Swift无法读取数据’;因为它是’;格式正确,json,swift,Json,Swift,我是swift的新手,正在尝试找出如何将JSON解析为结构。我正在尝试从NASA Mar的漫游者照片中获取图像。我正在尝试在线学习教程,但似乎无法解决此问题。我做错了什么 错误: 致命错误:无法读取数据,因为它的格式不正确 import Foundation class API { class func getImage(_ onSucessus: @escaping ([LatestPhoto]) -> ()){ Constrant.session.dataTa
import Foundation
class API {
class func getImage(_ onSucessus: @escaping ([LatestPhoto]) -> ()){
Constrant.session.dataTask(with: Constrant.request){(data, res, err) in
guard let data = data, err == nil else{
fatalError()
}
do{
let apod = try Constrant.decoder.decode([LatestPhoto].self, from: data)
DispatchQueue.main.async {
onSucessus(apod)
}
}
catch{
fatalError(error.localizedDescription)
}
}.resume()
}
}
结构
struct LatestPhoto: Identifiable, Codable{
let id = UUID()
let imgSrc: String
let earthDate: String
enum CodingKeys: String, CodingKey {
case imgSrc = "img_src"
case earthDate = "earth_date"
}
}
JSON
您的JSON格式与您试图解码的内容不太匹配。您需要在JSON对象的根目录下为
最新的\u照片
数组提供一个包装器
例如:
struct LatestPhotosWrapper: Codable {
let latestPhotos: [LatestPhoto]
enum CodingKeys: String, CodingKey {
case latestPhotos = "latest_photos"
}
}
(除了提供CodingKey
,您还可以查看用于从snake-case转换的内置系统:)
此外,您可能希望打印错误
,而不仅仅是错误。localizedDescription
——您可以更好地了解正在发生的事情。例如,使用原始代码,您可以获得:
应解码数组,但找到了字典
最后,您可以查看app.quicktype.io——您可以粘贴JSON并获得为您预先构建的正确Swift结构。现在就可以了。非常感谢你的帮助。
struct LatestPhotosWrapper: Codable {
let latestPhotos: [LatestPhoto]
enum CodingKeys: String, CodingKey {
case latestPhotos = "latest_photos"
}
}
let apod = try JSONDecoder().decode(LatestPhotosWrapper.self, from: data)