andreich
@andreich

Swift. Mapping из JSON в объекты модели. Как парсить массив из массивов?

Имеется вот такой JSON

{
        "offline": false,
        "data": {
            "path": [
                [ {
                        "Latitude": 56.789351316653,
                        "Longitude": 60.6053340947616
                    }, {
                        "Latitude": 56.78674,
                        "Longitude": 60.60613
                    }
                ], [ {
                        "Latitude": 56.79071,
                        "Longitude": 60.60492
                    }, {
                        "Latitude": 56.79129,
                        "Longitude": 60.60493
                    } ]
            ] } }


и моделька для него на swift

class PointUpperCase: NSObject, MapperCreator {
        var Latitude = 0.0
        var Longitude = 0.0
        
        class func createMapper() -> RKObjectMapping? {
            let mapper = RKObjectMapping(forClass: PointUpperCase.self)
            mapper.addAttributeMappingsFromArray(["Latitude", "Longitude"])
            return mapper
        }
        
    }
    
    
    class Data: NSObject, MapperCreator{
        var path :[[PointUpperCase]] = [[PointUpperCase]()]    
        
        class func createMapper() -> RKObjectMapping? {
            
            let mapper = RKObjectMapping(forClass: Data.self)
            mapper.addRelationshipMappingWithSourceKeyPath("path", mapping: PointUpperCase.createMapper())
            return mapper
        }
    }
    
    class TransportRequestResult: NSObject, MapperCreator {
        var offline = false
        var data = Data()
        
        class func createMapper() -> RKObjectMapping? {
            let mapper = RKObjectMapping(forClass: TransportRequestResult.self)
            mapper.addAttributeMappingsFromArray(["offline"])
            mapper.addRelationshipMappingWithSourceKeyPath("data", mapping: Data.createMapper())
            return mapper
        }
    }


Так вот, проблема заключается в следующем: не удается распарсить поле path из json, из-за того, что там массив из массивов объектов.
Как я понимаю, нужно правильно инициализировать переменную path в модели, но не совсем понимаю как это сделать.
В случае массивов единичной размерности все работает хорошо.
  • Вопрос задан
  • 2957 просмотров
Пригласить эксперта
Ответы на вопрос 1
@agee
Для начала неплохо было бы указать, что Вы используете RestKit.
Создавать переменную path в модели не нужно. Нужно просто дать понять RestKit'у, что ему придется работать с массивом по определенному пути. В качестве пути к маппингу нужно указать не "path", а "data.path".
Я не работал с классом RKObjectMapping напрямую. Использовал RKObjectManager.
objectManager = [[RKObjectManager alloc] initWithHTTPClient:afHttpClient];

Создавал объект типа RKResponseDescriptor, в котором указывал "путь" к JSON-массиву.
RKResponseDescriptor *characterResponseDescriptor =
    [RKResponseDescriptor responseDescriptorWithMapping:objectMapping
                                                 method:RKRequestMethodGET
                                            pathPattern:pathPattern
                                                keyPath:@"data.results" // <- путь к JSON-массиву
                                            statusCodes:[NSIndexSet indexSetWithIndex:200]];
    
    [objectManager addResponseDescriptor:characterResponseDescriptor];


А потом вызывал у обжект-менеджера getObjectsAtPath:
[objectManager getObjectsAtPath:path
                                           parameters:queryParams
                                              success:success
                                              failure:failure];
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы