2013-08-09 2 views
1

Я пытаюсь отправить некоторый JSON в бэкэнд Rails. При сериализации полезной нагрузки (NSDictionary) пустой массив кодируется как nil вместо [] (пустой массив).iOS JSON сериализационный пустой массив, сериализованный как nil вместо []

Является ли JSON кодировкой пустого NSArray как [] не поддерживается в iOS?

Я попытался изменить «параметры» в dataWithJSONObject: без успеха. Отправка по @ "[]" как обычного ol 'NSString также не работает.

Вот код:

NSData* jsonData = [NSJSONSerialization dataWithJSONObject:payload options:NSJSONReadingMutableLeaves error:&error]; 

[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:jsonData]; 
AFJSONRequestOperation *authRequest = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:successBlock failure:failBlock]; 
[authRequest start]; 

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

+0

Я видел противоположное на других языках, где используется пустой массив, потому что язык не имеет эквивалента NSNull. Думаю, у меня никогда не было вызова для отправки пустого массива на iOS. –

+0

Вы всегда можете попробовать одну из двух десятков реализаций JSON для Objective-C. –

+1

Я предлагаю вам передать в адрес объекта 'NSError *' аргумент 'error:', а затем проверить его при возврате. –

ответ

1

Я подозреваю, что проблема исходит от Rails, а не с прошивкой, есть проблема, связанная с дыркой безопасности в Rails, поскольку 3.2.11

https://github.com/rails/rails/issues/8832

https://github.com/rails/strong_parameters/issues/82

Например:

Отправка пустого массива в вашем теле {"bookmarks":[]}

Получить s сериализован в Rails как: {"bookmarks"=>nil}

Чтобы быть уверенным, в чем проблема, возникающая из вас, следует проверять запрос с использованием прокси-сервера, такого как Charles.

Смежные вопросы