繁体   English   中英

在Restkit iOS中解析没有对象映射的JSON

[英]Parsing JSON without Object Mapping in Restkit iOS

我创建了一个登录页面,它使用Restkit RKClient发送登录详细信息,并获取JSON数据(用户或错误)。 我希望能够在没有对象映射的情况下解析JSON数据,只需将JSON解析为字典。 原因是它只是一个简单的登录发送用户名和密码,如果我设置对象映射,我将必须将登录详细信息设置为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响应解析为NSDictionary或NSArray。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM