Как добавить NSArray из NSDictionaries в запрос AFJSONRequestSerializer?

Я написал некоторый код для помещения NS(изменяемого) словаря в NSArray. Но после добавления словаря в массив создается впечатление, что он создает отдельные словари для каждой пары ключ-значение. Смотрите пример ниже.

NSMutableDictionary *info = [[NSMutableDictionary alloc] init];
[info setObject:@"123" forKey:@"user_id"];
[info setObject:@"John" forKey:@"name"];
NSArray *array = [NSArray arrayWithObject:info];

NSMutableDictionary *htmlParams = [[NSMutableDictionary alloc] init];
[htmlParams setObject:array forKey:@"users"];

ожидаемый результат:

{
    "users": [
        {
            "user_id": 123,
            "name": "John
        }
    ]

}

что я получаю:

{
    "users": [
        {
            "user_id": 123,
        }, {
            "name": "John
        }
    ]

}

Что я делаю неправильно?

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

РЕДАКТИРОВАТЬ * Я попробовал еще кое-что, и, кажется, я понял, в чем проблема, но это все еще кажется мне странным.

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

Я создал для новых NSDictionaries (как объектные литералы):

1:

NSDictionary *info = @{
    @[
        @{
            @"firstname": @"John",
            @"lastname": @"Doe",
        },
        @{
            @"firstname": @"Jane",
            @"lastname": @"Da",
        },
    ]
};

2:

NSDictionary *info = @{
        @0: @{
                @"firstname": @"John",
                @"lastname": @"Doe",
        },
        @1: @{
                @"firstname": @"Jane",
                @"lastname": @"Da",
        },
};

1: идет неправильно, каждая строка в массиве выводится как отдельный словарь в моем бэкэнде. 2: ведет себя как ожидалось.

Я понятия не имею, что вызывает эту проблему, но я почти уверен, что это не мой пакет (AFNetworking), а также не мой бэкэнд (Symfony PHP).

РЕДАКТИРОВАТЬ *

Кажется, мне нужно было добавить Json Serializer к моему запросу.

AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;

2 ответа

Решение

Кажется, мне нужно было добавить JSON Serializer к моему запросу.

AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;

Я запускаю ваш код в своем X-коде, который я получил ниже:

{
users =     (
            {
        name = John;
        "user_id" = 123;
    }
);

}

И это то, что вы ожидаете, я не думаю, что в вашем коде есть что-то неправильное, поэтому проверьте еще раз, потому что в противном случае я также получу неправильный ответ.

Другие вопросы по тегам