首页 > 解决方案 > 如何在 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 上看过一些视频,但没有一个能帮助我解决这种特殊情况。

我感谢您的帮助。

问候!

标签: arraysswiftapi

解决方案


找到我的答案:首先,我创建了一个包含所有 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 获得的值分配给它以在其他地方使用)但现在它似乎不起作用。

我寻求您的经验和建议。

我感谢您的帮助。


推荐阅读