2016-12-26 12 views
1

나는 AlamofireAlamofire Object Mapper을 사용하고 있습니다.객체 매퍼를 사용하여 응답 JSON에서 하위 배열을 매핑하는 방법은 무엇입니까?

이 웹 서비스의 응답이라고 생각 :이 응답에서

{ 
    "status": 200, 
    "error": false, 
    "response": { 
    "id": 9, 
    "parent_id": 0, 
    "company_id": 1, 
    "image": "", 
    "name": "Games", 
    "description": "Games", 
    "created_at": "2016-12-16 12:11:51", 
    "updated_at": "2016-12-16 12:11:51", 
    "deleted_at": null, 
    "Games": [ 
     { 
     "id": 36, 
     "company_id": 1, 
     "application_id": 7, 
     "category_id": 9, 
     "start_date": "2016-12-16 00:00:00", 
     "end_date": "2016-12-27 00:00:00", 
     "status": "PUBLISH", 
     "created_at": "2016-12-16 13:29:16", 
     "updated_at": "2016-12-16 13:29:48", 
     "deleted_at": null 
     } 
    ] 
    }, 
    "error_messages": [], 
    "error_message": "" 
} 

내가 Games 배열을 얻을합니다. 여기

Games 모델

var gameId : String! 
    var companyID : String! 
    var categoryID : String! 
    var startDate : String! 
    var endDate : String! 
    var status : String! 
    var buildertitle : String! 
    var builderdescription : String! 



    override init() { 
     super.init() 
    } 

    required convenience init?(map : Map) { 
     self.init() 
    } 

    func mapping(map: Map) { 

     gameId <- map["id"] 
     companyID <- map["company_id"] 
     categoryID <- map["category_id"] 
     startDate <- map["start_date"] 
     endDate <- map["end_date"] 
     status <- map["status"] 
     buildertitle <- map["title"] 
     builderdescription <- map["description"] 

    } 

    init(dic : NSDictionary) { 
     super.init() 

     gameId = Utils.nulltoEmpty(dic["id"] as AnyObject) as! String 
     companyID = Utils.nulltoEmpty(dic["company_id"] as AnyObject) as! String 
     categoryID = Utils.nulltoEmpty(dic["category_id"] as AnyObject) as! String 
     startDate = Utils.nulltoEmpty(dic["start_date"] as AnyObject) as! String 
     endDate = Utils.nulltoEmpty(dic["end_date"] as AnyObject) as! String 
     status = Utils.nulltoEmpty(dic["status"] as AnyObject) as! String 
     buildertitle = Utils.nulltoEmpty(dic["title"] as AnyObject) as! String 
     builderdescription = Utils.nulltoEmpty(dic["description"] as AnyObject) as! String 

    } 

이며, 여기 내 response 모델

var status : Int! 
    var user : User? 
    var errorMessage : String? 
    var device : Device? 
    var games : Games? 

    required convenience init?(map : Map) { 
     self.init() 
    } 


    func mapping(map: Map) { 
     status <- map["status"] 
     user <- map["response"] 
     errorMessage <- map["error_message"] 
     device <- map["response"] 
     games <- map["Games"] 
    } 

그리고 마지막으로이 alamofire

func getGamesList() { 
    let UrlReqeust = Router.getUserNews().urlRequest 

    Alamofire.request(UrlReqeust!).responseArray{ (response : DataResponse<[Games]>) in 

     print("The status code is : \(response.response?.statusCode)") 
     print("the response is : \(response)") 

     switch response.result { 
     case .success(let gamesbuilder): 

      print("the result is : \(gamesbuilder)") 

      break 
     case .failure(let Error): 
      break 
     } 



    } 

} 
내 requst입니다
  • responseArray 대신 responseString 사용자 인 경우 String이 표시됩니다. 그렇지 않으면 아래와 같이 성공 상태 코드에 오류가 발생합니다.

는 "상태 코드는 다음과 같습니다 옵션 (200) 응답은 다음과 같습니다 실패 : 오류 도메인 = com.alamofireobjectmapper.error 코드 = 2"ObjectMapper 응답을 직렬화하는 데 실패했습니다 "사용자 정보가 = {NSLocalizedFailureReason = ObjectMapper에 실패했습니다. } "

다른 부분은 모두 responsesresponse 키가됩니다. 어떻게 필터링 할 수 있습니까?

당신의 도움을 바랍니다.

답변

0

responseArray(keyPath: "Games") 또는 responseArray(keyPath: "response.Games")을 사용해 보셨습니까? 매핑을 사용하면 모든 필드를 구문 분석하는 방법을 알 수 없기 때문입니다.