在Restkit iOS中parsingJSON而不用对象映射

我创build了一个使用Restkit RKClient发送login细节的login页面,并获取JSON数据(无论是用户还是错误)。 我希望能够parsingJSON数据而无需对象映射,只需要JSON即可字典。 原因是这只是一个简单的login发送用户名和密码,如果我设置对象映射,我将不得不设置login对象的详细信息,然后设置路由等…这似乎是有点啰嗦。

这是我的代码

 - (IBAction)login:(id)sender { [self.activityIndicator startAnimating]; NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObject:self.username.text forKey:@"username"]; [params setObject:self.password.text forKey:@"password"]; [params setObject:@"login" forKey:@"type"]; [[RKClient sharedClient] post:@"/login" params:params delegate:self]; } - (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response { if ([request isPOST]) { if ([response isJSON]) { NSLog(@"Got a JSON response back from our POST: %@", response.bodyAsString); } } [self.activityIndicator stopAnimating]; } 

我怎样才能得到JSON数据到一个可读的对象? 谢谢

你可以简单的在你的RKResponse对象上调用parsedBody:nil,并将返回的对象赋给NSDictionary:

 responseDict = [response parsedBody:nil]; 

作为一个额外的支票,我使用一些便利的方法来检查一个成功的回应:

 - (bool) wasRequestSuccessfulWithResponse:(RKResponse*)response { bool isSuccessfulResponse = NO; id parsedResponse; NSDictionary *responseDict; if(response != nil) { parsedResponse = [response parsedBody:nil]; if ([parsedResponse isKindOfClass:[NSDictionary class]]) { responseDict = [response parsedBody:nil]; if([[responseDict objectForKey:@"success"] boolValue]) { isSuccessfulResponse = YES; } } } return isSuccessfulResponse; } 

在iOS 5.1 +有NSJSONSerialization。

这里是一个使用RestKit 0.2和NSJSONSerialization的例子:

 [[RKObjectManager sharedManager] getObjectsAtPath:kLoginURL parameters:params success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { NSError *error; NSDictionary* json = [NSJSONSerialization JSONObjectWithData:operation.HTTPRequestOperation.responseData options:NSJSONReadingMutableLeaves error:&error]; NSLog(@"msg: %@", [json objectForKey:@"msg"]); } failure:^(RKObjectRequestOperation *operation, NSError *error) { }]; 

你可以使用像JSONKit这样的开源库。 它能够将JSON响应parsing到NSDictionary或NSArray中。