Как добавить 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;
}
);
}
И это то, что вы ожидаете, я не думаю, что в вашем коде есть что-то неправильное, поэтому проверьте еще раз, потому что в противном случае я также получу неправильный ответ.