ios - 使用 Codable 解码 JSON 适用于一个调用,但不适用于具有相同属性的另一个调用
问题描述
我正在从事一个涉及地震的项目,我已经调用了震级为 4.5 或更大的地震 URL,并且数据被正确解码。我在控制台上看到响应:https ://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_week.geojson
问题出在我使用另一个 URL 时:https ://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_week.geojson 。此 URL 返回与上述 URL 相同的属性,但无法正确解码。
我尝试过的事情:
- 使响应的属性可选
- 为响应创建单独的模型
这就是我的模型:
struct Earthquake: Codable {
let type: String?
let metadata: Metadata?
let features: [Feature]
let bbox: [Double]?
}
// MARK: - Metadata
struct Metadata: Codable {
let generated: Int
let url: String
let title: String
let status: Int
let api: String
let count: Int
}
// MARK: - Feature
struct Feature: Codable {
let type: String
let properties: Properties
let geometry: Geometry
let id: String?
}
// MARK: - Properties
struct Properties: Codable {
let mag: Double?
let place: String?
let time, updated: Int?
let tz: Int?
let url: String?
let detail: String?
let felt: Int?
let cdi, mmi: Double?
let alert: String?
let status: String?
let tsunami, sig: Int?
let net: String?
let code, ids: String?
let sources: String?
let types: String?
let nst: Int?
let dmin: Double?
let rms: Double
let gap: Int?
let magType: String?
let type: String?
let title: String?
}
// MARK: - Geometry
struct Geometry: Codable {
let type: String
let coordinates: [Double]
}
我就是这样称呼它的。
let topEarthQuakesURL = URL(string: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_week.geojson")!
let task = URLSession.shared.dataTask(with: topEarthQuakesURL) { (data, response, error) in
guard let data = data else {return}
print(data)
let decoder = JSONDecoder()
let EarthquakeData = try! decoder.decode(Earthquake.self, from: data)
print(EarthquakeData.features[0].geometry.coordinates)
}
task.resume()
我得到这个错误。请注意,它 print's out 1064216 bytes
。这告诉我我正在获取数据,它只是在某一时刻没有正确解码。只是不确定在哪里。
1064216 bytes
Fatal error: 'try!' expression unexpectedly raised an error:
Swift.DecodingError.dataCorrupted(Swift.DecodingError.Context(codingPath:
[CodingKeys(stringValue: "features", intValue: nil), _JSONKey(stringValue: "Index 29", intValue:
29), CodingKeys(stringValue: "properties", intValue: nil), CodingKeys(stringValue: "gap",
intValue: nil)], debugDescription: "Parsed JSON number <231.67> does not fit in Int.",
underlyingError: nil)): file
/Users/olerma/Documents/EarthQuakes/Urth/Urth/Controller/MainViewController.swift, line 33
解决方案
properties -> gap ----- 解析的 JSON 编号 <231.67> 不适合 Int。
所以改变
let gap: Int?
至
let gap: Double?
推荐阅读
- android - 在 Android Studio 中运行时,Android 应用程序停止在模拟器上运行
- java - Kafka 使用 Sink 连接器到 Google Pub/Sub
- spring - Gradle 中隐式导入的 Maven BOM 文件是否占主导地位?
- conv-neural-network - ValueError:在pytorch中将张量转换为图像时,操作数无法与形状(50,50,512)(3,)(50,50,512)一起广播
- python-3.x - 如何使用 scikt-learn 中的持久性模型计算评估指标
- r - 如何在 R 中读取 CSV 文件时解决错误
- javascript - AJAX POST ---> 未确定的索引?
- python - 按索引对列表中的数字进行分组(python0
- java - JAXB 总是返回最后一个
标记时不应超过 1 标签 - vb.net - 使用名称属性调用控件并向其添加事件