Отправить NSMutableArray как JSON, используя JSON-Framework - PullRequest
4 голосов
/ 14 июля 2010

Я успешно использую JSON-Framework в своем проекте для декодирования отправки JSON с сервера.

Теперь мне нужно сделать это наоборот, и у меня возникают проблемы с данными, которые нужно отправитьNSMutableArray извлекается из CoreData.

При использовании

NSString* jsonString = [menuItems JSONRepresentation]

я получаю сообщение "Сериализация JSON не поддерживается для MenuItems".

Нужно ли преобразовывать NSMutableArrayв какой-то другой формат, чтобы JSON-Framework мог его сериализовать?

Спасибо за любую помощь,
Мигель

Ответы [ 3 ]

4 голосов
/ 22 сентября 2010

Позвольте мне предложить более приятное решение:

В вашем классе MenuItems реализуйте метод -proxyForJson, и тогда вы сможете вызывать метод -JSONRepresentation непосредственно в массиве menuItems.

@interface MenuItems(SBJson)
-(id)proxyForJson {
    return [NSDictionary dictionaryWithObjectsAndKeys:
            self.id,@"id",
            [self.modified description],@"modified",
            nil];
}
@end

Надеюсь, это поможет!

1 голос
/ 14 июля 2010

Я наконец решил это, но я не уверен, что это лучший / самый элегантный способ сделать это.

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 принимает: -)

0 голосов
/ 18 июля 2011

Это пример отправки словаря и массива на сервер. Который работал для меня 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];

}
...