Отправить 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];

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