2010-07-14 6 views
4

J'utilise JSON-Framework dans mon projet pour décoder l'envoi JSON à partir d'un serveur.Envoyer NSMutableArray en tant que JSON à l'aide de JSON-Framework

Maintenant, je dois le faire dans l'autre sens et je suis confronté à des problèmes car les données à envoyer sont un NSMutableArray récupéré à partir de CoreData.

Lorsque vous utilisez

NSString* jsonString = [menuItems JSONRepresentation] 

je reçois le message "sérialisation JSON pas pris en charge pour MenuItems". Dois-je convertir NSMutableArray à un autre format afin que JSON-Framework puisse le sérialiser?

Merci pour toute aide,
Miguel

Répondre

1

J'ai finalement résolu, mais je ne sais pas si c'est le meilleur/manière la plus élégante de le faire.

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]]; 

Explication:
J'ai d'abord pensé que le problème était le NSMutableArray, mais alors réalisé qu'il était le contenu de celui-ci. Donc, je viens d'obtenir l'information nécessaire sur et sauvé comme NSArray qui JSON-cadre accepte les :-)

4

Permettez-moi de proposer une solution un peu plus agréable:

Dans votre classe MenuItems, mettre en œuvre le -proxyForJson méthode et vous devriez alors être en mesure d'appeler la méthode -JSONRepresentation directement sur le tableau menuItems.

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

Espérons que cela aide!

+0

Salut Stig, je vais essayer ... merci :-) – Michi

+0

Avez-vous eu à travailler? –

+0

Salut Stig, je n'ai pas encore trouvé le temps de le tester ... vous le dira dès que je serai là pour l'essayer. – Michi

0

Ceci est un exemple d'envoi de dictionnaire et de tableau vers serveur. Qui a fonctionné pour moi 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]; 

} 
+0

La classe SBJSON provient d'une version _oooold_. Veuillez mettre à jour votre copie de SBJson! –

Questions connexes