arrays - 如何在 Swift 中解析数组 API?
问题描述
我尝试从如下所示的 API 获取信息:
我可以使用以下方法解析信息:
override func viewDidLoad() {
super.viewDidLoad()
getAPI()
}
func getAPI() {
let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
if error == nil {
guard let urlContent = data else { return }
do {
let JSONResult = try JSONSerialization.jsonObject(with: urlContent, options: .mutableContainers)
print("JSON Result:", JSONResult)
print("-----------------")
print(type(of: JSONResult))
} catch {
print("JSON processing failed.")
}
} else {
print("Error serializing JSON:", error!)
}
}
task.resume()
}
但我在从 API 中检索个人数据时遇到了麻烦(如“x”、“y”和“companyZoneId”)。我尝试从 JSONResult (JSONResult.first) 中提取第一个元素,但它只显示数组中第一个元素的组件(所以我假设我在数组中有一个数组(?))。
如何获取和存储这些元素?因为那时我想在地图中显示这些位置,但这是我稍后会处理的另一个步骤。现在,我坚持从该 API 数组的每个元素中检索个人信息,并请您的专业知识来指导我。
我在这里阅读了不同的教程,并在 youtube 上看过一些视频,但没有一个能帮助我解决这种特殊情况。
我感谢您的帮助。
问候!
解决方案
找到我的答案:首先,我创建了一个包含所有 API 元素的结构:
struct MyInfo: Codable {
let id: String
let name: String
let x: Double // Longitude
let y: Double // Latitude
let licencePlate: String?
let range: Int?
let batteryLevel: Int?
let seats: Int?
let model: String?
let resourceImageId: String?
let pricePerMinuteParking: Int?
let pricePerMinuteDriving: Int?
let realTimeData: Bool?
let engineType: String?
let resourceType: String?
let companyZoneId: Int
let helmets: Int?
let station: Bool?
let availableResources: Int?
let spacesAvailable: Int?
let allowDropoff: Bool?
let bikesAvailable: Int?
}
然后我创建了从 API 获取我需要的元素的方法:
func getAPI() {
let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
if error == nil {
guard let urlContent = data else { return }
do {
let JSONResult = try JSONDecoder().decode([MyInfo].self, from: urlContent) //JSONSerialization.jsonObject(with: urlContent, options: .mutableContainers)
print("JSON Result:", JSONResult)
for jsonData in JSONResult {
self.lonX.append(jsonData.x)
self.latY.append(jsonData.y)
self.companyZoneID.append(jsonData.companyZoneId)
} catch {
print("JSON processing failed.")
}
} else {
print("Error serializing JSON:", error!)
}
}
task.resume()
}
}
现在我有另一个我无法解决的问题:我无法将 x 和 y 值(来自 jsonResult)分配给类内的全局变量(self.lonX 和 self.latY)。
我怎样才能做到这一点?我做了另一个应用程序,在那里我做了类似的事情(创建了一个全局变量结构,我将从 API 获得的值分配给它以在其他地方使用)但现在它似乎不起作用。
我寻求您的经验和建议。
我感谢您的帮助。
推荐阅读
- sqlite - 将数据 (.jpg) 文件插入 sqlite 数据库
- php - 当用户点击我们在 Google 上的链接时获取 URL 推荐人
- r - ggplot、饼图和 facet_wrap 中的不同半径
- ruby-on-rails - 使用 capybara 测试 simple_form
- android - How to solve Android P DownloadManager stopping with "Cleartext HTTP traffic to 127.0.0.1 not permitted"?
- ssis - SSIS 表达式任务功能但不能在标题中工作
- android - How do I find the search query text in a debugger?
- python - Python object of type long has no Len() error?
- java - 如果不起作用,为什么这么短?message.startsWith("www.")? JOptionPane.showMessageDialog(win, "Url is") :
- php - 为什么安装时缺少 mysqli 类?