使用JSON-Framework将NSMutableArray作为JSON发送

时间:2010-07-14 10:20:58

标签: iphone json nsmutablearray json-framework

我在我的项目中成功使用JSON-Framework来解码来自服务器的JSON发送。

现在我需要反过来这样做,因为要发送的数据是从CoreData获取的NSMutableArray,所以我遇到了问题。

使用时

NSString* jsonString = [menuItems JSONRepresentation]

我收到消息“MenuItems不支持JSON序列化”。

我是否需要将NSMutableArray转换为其他格式,以便JSON-Framework可以对其进行序列化?

感谢您的帮助,
米格尔

3 个答案:

答案 0 :(得分:4)

请允许我建议一个更好的解决方案:

在您的MenuItems类中,实施-proxyForJson方法,然后您应该可以直接在-JSONRepresentation数组上调用menuItems方法。

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

希望这有帮助!

答案 1 :(得分: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-Framework接受了: - )

答案 2 :(得分:0)

这是一个向服务器发送字典和数组的示例。这对我来说是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];

}