Распарсить массив вложенных словарей


#1

Добрый день, гуглил пробовал, и не получается распарсить и получить данные из сервера. В проекте используется ObjectMapper и Alamofire. Как я могу это сделать?

из сервера приходит:

        pastEmployments =         (
                        {
                jobTitle = "IOS Developer";
                namePastEmployer = Constantine;
                pastEmploymentId = 107;
                time =                 {
                    days = 1;
                    months = 1;
                    years = 1;
                };
            },
                        {
                jobTitle = "PHP Developer";
                namePastEmployer = Dmytro;
                pastEmploymentId = 108;
                time =                 {
                    days = 1;
                    months = 1;
                    years = 1;
                };
            }
        );

#2
class PastEmploymentsResponse: Mappable {

    var data: [PastEmployment]?

    init() {}
        
    required init?(map: Map) {}
    
    func mapping(map: Map) {
        data<- map["data"]
    }
}

    class PastEmployment: Mappable {

        var jobTitle: String?
        var namePastEmploeyr: String?
        var pastEmploymentId: Int?
        var time: PastEmploymentTime?
        
        init() {}
        
        required init?(map: Map) {}
        
        func mapping(map: Map) {
            jobTitle<- map["jobTitle"]
            namePastEmploeyr<- map["namePastEmploeyr"]
            pastEmploymentId<- map["pastEmploymentId"]
            time<- map["time"]
        }
    }

    class PastEmploymentTime: Mappable {

        var days: Int?
        var months: Int?
        years: Int?

        init() {}
        
        required init?(map: Map) {}
        
        func mapping(map: Map) {
            days<- map["days"]
            months<- map["months"]
            years<- map["years"]
        }
    }

P.S. возможно вам не понадобится первый класс


#3

Спасибо за ответ, а можете еще подсказать что не так делаю в alamofire

func resumeGetJob(_ completion: @escaping (PastEmployment) -> Void) {
    let url = baseURL + APIRequestEmployee.pastEmployments
    Alamofire.request(url, method: .get, headers: headersWithToken()).validate().responseJSON { response in
        switch response.result {
        case .success(let value):
            
            guard let dict = value as? [String: Any] else { return }
            print("\n\n")
            let pastEmployment = PastEmployment(JSON: dict)
            print("jobTitle = \(String(describing: pastEmployment?.jobTitle))")
            completion(pastEmployment!)
        case .failure(let error):
            print(error)
        }
    }
}

получаю nil


#4

Могу ошибаться, но у вас вроде возвращает массив словарей, а не словарь. Значит это будет так:

guard let dict = value as? [[String: Any]]


#5

да, все верно

Constantine
было бы неплохо еще увидеть сам json
можете еще упростить себе жизнь и попробовать это