JSON格式问题

时间:2012-07-01 13:50:55

标签: objective-c json restkit

我是网络服务的新手,并且GET工作正常。当我尝试POST时,我发送此JSON字符串:

{"frequency":"None","leader":"test@test.com"}

但是服务器期待这个:

{ 
    "meta": 
       {"limit": 20, "total_count": 2}, 
    "objects": 
       [{"frequency": "None", "leader": "jsmith@gmail.com"},
        {"frequency": "None", "leader": "jsmith@gmail.com"}]
}

在我的NewMeetingRK对象中,我试图按如下方式映射到“对象”:

mgr.serializationMIMEType = RKMIMETypeJSON;

RKObjectMapping* newmtg = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];

    [newmtg mapKeyPath: @"frequency"     toAttribute:@"repeat"      ];
    [newmtg mapKeyPath: @"leader"     toAttribute:@"leader"      ];

RKObjectMapping* newmtgSerializeMapping = [newmtg inverseMapping];
    [mgr.mappingProvider setSerializationMapping:newmtgSerializeMapping forClass:[NewMeetingRK class]];
[mgr.mappingProvider setMapping:newmtgSerializeMapping forKeyPath:@"objects"];

[mgr.router routeClass:[NewMeetingRK class] toResourcePath:@"" forMethod:RKRequestMethodPOST];    

这不起作用。我尝试将toResourcePath更改为@“/ objects”,但这也无效。知道如何将值发送到服务器上的第二组JSON值吗?

--- ---- EDIT

@HotLicks指出我错过了阵列 - 谢谢。但是我仍然无法使用JSON值来完成我的简单帖子 我可以用RKClient做一些简单的RKObjectManager吗?

client = [RKClient clientWithBaseURL:[RKURL URLWithBaseURLString:@"https://appzute.appspot.com"]];
NSLog(@"I am your RKClient singleton : %@", [RKClient sharedClient]); 
client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES;
[client setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

NSMutableArray *meetingArray = [NSMutableArray arrayWithCapacity:100];  
[meetingArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:
                         self.leaderEmail.text, @"leader", 
                         self.repeatLabel.text, @"frequency", 
                         nil]];
NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:meetingArray, @"objects", nil];

NSString *jsonString = [jsonDictionary JSONRepresentation];
NSLog (@"jsonString is: %@",jsonString);
[client post:@"/api/meeting/?format=json&username=testuser@test.com&api_key=sdf7asd87fs8df78sdf" params:jsonString delegate:self]; 

jsonString的值看起来很完美:{“objects”:[{“leader”:“me@me.com”,“frequency”:“None”}]} 问题是params:jsonString无效,因为它需要一个对象而不是一个字符串。但如果我使用params:jsonDictionary,那么我得到这个日志文件: 发送RKRequest:objects [] [leader] = me%40me.com& objects [] [frequency] = None 我restkit.network:RKRequest.m:676状态代码:500

我可能做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

不熟悉JSON工具包,但通常你要做的是创建两个词典,每个词对应一个“对象”,将它们放在一个数组中(你的“对象”数组)。然后为您的“元”信息创建一个字典。最后,创建一个包含“meta”信息和“objects”数组的字典。

JSON几乎完美地映射到NSDictionary / NSArray,因此实际上并不需要使用使用“包装器”对象的工具包。