ios - 如何在 Swift 4 中解析 A​​lamofire 中的数据

标签 ios json swift alamofire codable

这是我的第一篇文章。到目前为止,我总是自己找到答案,但今天,经过大量时间的研究,我仍然在碰壁......

这是我的问题,我从 Alamofire 请求中获取 JSON,但无法按照我想要的方式解析我的数据。

我有这个答案:

{"family": {"id":1, "name": "myFamily","members": [{"userId":15, "lasName": "COLINET", "firstName":"Steve","latitude":48.290762, "longitude":4.070 },{"userId":18,"lasName":"BERTHIER","firstName":"Renaud","latitude":48.290755, "longitude":4.071 }]}}

我想要获取一个成员列表,我可以在其中获取名字/姓氏和纬度/经度。 我尝试过的事情太多了,无法一一列举......

这是我现在拥有的(错误的)代码:

func getMembers(username:String, password:String){
    var members:NSDictionary = [:]
    let parameters: Parameters=[
        "action":"getPosition",
        "username":"\(username)",
        "password":"\(password)"
    ]
    Alamofire.request(login_url, method: .post, parameters: parameters).responseJSON{
        response in

        switch response.result {
        case .success(let data):
            guard let json = data as? [String : AnyObject] else { return }
            members = json["family"]!["members"] as! NSDictionary
            members.forEach { member in
                print(member["firstName"])
            }
        case .failure(let error):
            print(error)
        }
    }
}

感谢您的帮助。

最佳答案

members 是数组而不是字典

 if let family = json["family"] as? [String:Any] {
     if let members = family["members"] as? [[String:Any]] {
         print(members)
     }
 }

使用会更好

struct Root: Codable {
    let family: Family
}

struct Family: Codable {
    let id: Int
    let name: String
    let members: [Member]
}

struct Member: Codable {
    let userID: Int
    let lasName, firstName: String
    let latitude, longitude: Double

    enum CodingKeys: String, CodingKey {
        case userID = "userId"
        case lasName, firstName, latitude, longitude
    }
}

do {
    let tr = try JSONDecoder().decode(Root.self,from:jsonData)
    print(tr.family.members)
}
catch {

  print(error)
}

关于ios - 如何在 Swift 4 中解析 A​​lamofire 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53270775/

相关文章:

ios - 在 Class init() 方法内的函数内初始化变量

ios - Instagram hooks 预选媒体问题

java - Json格式错误,已经获取数组时再请求数组

regex - Swift 覆盖 + 多种类型和长表达式

ios - Swift:更改 TableView 标题文本颜色 - 崩溃

swift - 使用 Stormpath 登录 LinkedIn

iphone - 如何获取iPhone电话号码

css - 视网膜手持显示器 : Can a 1px border be achieved via CSS?

json - 将 json 成员字段包装到对象

javascript - 使用filter()返回对象数组的唯一元素