Отправить NSMutableArray как JSON, используя JSON-Framework
Я использую JSON-Framework в своем проекте успешно для декодирования JSON-отправки с сервера.
Теперь мне нужно сделать это наоборот, и я сталкиваюсь с проблемами, так как данные для отправки являются NSMutableArray, извлеченными из CoreData.
Когда используешь
NSString* jsonString = [menuItems JSONRepresentation]
Я получаю сообщение "Сериализация JSON не поддерживается для MenuItems".
Нужно ли конвертировать NSMutableArray в какой-то другой формат, чтобы JSON-Framework мог его сериализовать?
Спасибо за любую помощь,
Miguel
3 ответа
Я наконец решил это, но я не уверен, что это лучший / самый элегантный способ сделать это.
NSMutableArray* items = [[NSMutableArray alloc] init];
for (MenuItems* item in menuItems) {
[items addObject:[NSArray arrayWithObjects:item.id,[item.modified description],nil]];
}
NSString *post = [NSString stringWithFormat:@"currentData=%@",
[items JSONRepresentation]];
Объяснение:
Сначала я подумал, что проблема в NSMutableArray, но потом понял, что это его содержимое. Поэтому я просто извлекаю нужную информацию и сохраняю ее как NSArray, которую JSON-Framework принимает:-)
Позвольте мне предложить несколько более приятное решение:
В вашем классе MenuItems реализуйте -proxyForJson
метод, и вы должны быть в состоянии вызвать -JSONRepresentation
метод непосредственно на menuItems
массив.
@interface MenuItems(SBJson)
-(id)proxyForJson {
return [NSDictionary dictionaryWithObjectsAndKeys:
self.id,@"id",
[self.modified description],@"modified",
nil];
}
@end
Надеюсь это поможет!
Это пример отправки словаря и массива на сервер. Который работал для меня 1000000% .
SBJSON *jparser = [[SBJSON new] autorelease];
NSString *ArrayjsonItems = [jparser stringWithObject:self.UrMergedArray];
NSString *DicjsonItems = [jparser stringWithObject:self.UrMergedDic];
NSLog(@"array Items :%@",self.UrMergedArray);
NSLog(@"dic Items :%@",self.UrMergedDic);
NSString *postString =[NSString stringWithFormat:@"Arrayitems=%@&Dicitems=%@",ArrayjsonItems,DicjsonItems];
NSLog(@"it is going to post : %@ \n\n",postString);
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:snapURL];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *connection=[[NSURLConnection alloc]
initWithRequest:request
delegate:self];
if (connection) {
self.receivedData = [[NSMutableData alloc]init];
}