Как я могу проанализировать мои данные из Alamofire в Swift 4 - PullRequest
0 голосов
/ 13 ноября 2018

Это мой первый пост. До сих пор я всегда находил свои ответы сам, но сегодня, после долгих часов исследований, я все еще бью себя об стену ...

Вот моя проблема, я получаю JSON из запроса Alamofire и не могу анализировать свои данные так, как хочу.

У меня есть этот ответ:

{"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)
        }
    }
}

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 13 ноября 2018

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)
}
...