2010-07-14 49 views
4

我在我的項目中成功使用JSON-Framework來解碼從服務器發送的JSON。使用JSON-Framework將NSMutableArray發送爲JSON

現在我需要以相反的方式來做,因爲要發送的數據是從CoreData獲取的NSMutableArray,所以我遇到了問題。

當使用

NSString* jsonString = [menuItems JSONRepresentation] 

我得到的消息 「JSON序列化不支持的MenuItems」。

我是否需要將NSMutableArray轉換爲其他格式,以便JSON-Framework可以序列化它?

感謝您的幫助,
米格爾

回答

1

我終於解決了這個問題,但我不知道這是否是最好的/最優雅的方式來做到這一點。

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-框架並接受:-)

4

允許我提出一個有點更好的解決方案:

在你的MenuItems類中,實現-proxyForJson方法,然後您應該可以直接在menuItems陣列上調用-JSONRepresentation方法。

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

希望這會有所幫助!

+0

嗨,斯蒂格,我會試試...謝謝:-) – Michi 2010-09-22 17:19:26

+0

你有沒有得到它的工作? – 2010-10-01 22:21:55

+0

嗨,斯蒂格,我還沒有找到時間來測試它......只要我一試身手,就會告訴你。 – Michi 2010-10-14 09:42:52

0

這是將字典和數組發送到server.which爲我工作的示例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

SBJSON類來自_oooold_版本。請升級您的SBJson副本! – 2012-05-31 14:48:56