Alamofire Object Mapper: как проанализировать вложенный массив в Swift - PullRequest
0 голосов
/ 14 декабря 2018

Это мой ответ API:

[
    [
        {
            "id": 24,
            "request_id": "rqst5c130cae6f7609.41056231",
            "business_name": "Code Viable",
            "business_email": "code@viable.com",
            "title": "Load",
            "details": "load",
            "load_description": "load",
            "amount_offered": "1",
            "pickup_address": "load",
            "dropoff_address": "load",
            "timestamp": "2018-12-14 01:51:42"
        }
    ],
    [
        {
            "id": 27,
            "request_id": "rqst5c1325881836d2.98441728",
            "business_name": "Code Viable",
            "business_email": "code@viable.com",
            "title": "Load",
            "details": "brendan",
            "load_description": "test load for brendan",
            "amount_offered": "1222",
            "pickup_address": "Load",
            "dropoff_address": "Load",
            "timestamp": "2018-12-14 03:37:44"
        }
    ]
]

Как вы можете видеть, это массив, заключенный в массив, у меня уже настроен объект сопоставления для внутреннего массива, например:

struct JobResponseDataObject: Mappable {

    init?(map: Map) {

    }

    var id: Int?
    var requestId: String?
    var businessName: String?
    var businessEmail: String?

    var title: String?
    var details: String?
    var loadDescription: String?
    var amountOffered: String?

    var pickUpAddress: String?
    var dropOffAddress: String?
    var timestamp: String?

    mutating func mapping(map: Map) {

        id              <- map["id"]
        requestId       <- map["request_id"]
        businessName    <- map["business_name"]
        businessEmail   <- map["business_email"]

        title           <- map["title"]
        details         <- map["details"]
        loadDescription <- map["load_description"]
        amountOffered   <- map["amount_offered"]

        pickUpAddress   <- map["pickup_address"]
        dropOffAddress  <- map["dropoff_address"]
        timestamp       <- map["timestamp"]
    }
}

Если у родителя есть имя для его дочернего массива, то я бы создал еще один маппер для верхнего уровня.Но в этом случае нет имени для внешнего массива, что мне нужно сделать, чтобы вызов alamofire .responseArray работал?

Alamofire.request(JOB_REQUEST_BASE_URL, method: .post, parameters: parameter, encoding: URLEncoding(), headers: nil).responseArray { (response: DataResponse<[JobResponseDataObject]>) in


            }
        }

Спасибо

1 Ответ

0 голосов
/ 14 декабря 2018

Ваш объект JSON имеет вложенный массив.Итак, разобрать, что вы можете сделать это двумя способами.Один из способов сделать это - проанализировать его как вложенный массив.

DataResponse<[[JobResponseDataObject]]>

И ваш код будет выглядеть следующим образом.

Alamofire.request(JOB_REQUEST_BASE_URL, method: .post, parameters: parameter, encoding: URLEncoding(), headers: nil).responseArray { (response: DataResponse<[JobResponseDataObject]>) in

//...

}

Предложение: Пока чтоЯ могу понять из JSON, он не должен быть во вложенном массиве.Если вам нужно добавить только один объект во вложенный массив, вы можете добиться того же с помощью простого массива.

Second Way Если у вас есть только один объект во вложенном массиве.Вы также можете проанализировать его следующим образом.

requestId       <- map["0.request_id"]

"0".здесь, чтобы получить первый объект внутреннего массива.Надеюсь, это поможет:)

...