【问题标题】:Parsing JSON without Object Mapping in Restkit iOS在 Restkit iOS 中解析没有对象映射的 JSON
【发布时间】:2012-08-16 18:25:11
【问题描述】:

我创建了一个登录页面,它使用 Restkit RKClient 发送登录详细信息,并取回 JSON 数据(用户或错误)。我希望能够在没有对象映射的情况下解析 JSON 数据,只需 JSON 到字典。原因是它只是一个发送用户名和密码的简单登录,如果我设置对象映射,我必须将登录详细信息设置为登录对象,然后设置路由等......有点啰嗦。

这是我的代码

- (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 数据获取到可读对象?谢谢

【问题讨论】:

    标签: objective-c ios json restkit


    【解决方案1】:

    您可以简单地在您的 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;
    
    }
    

    【讨论】:

    • 如何在 RestKit 0.2 中做到这一点,因为不再有 RKResponse 类
    • 我有同样的问题......混淆套件可以完成复杂的工作,但有时我们只需要直接将响应作为字典而不是类
    • 如果您希望将响应作为对象使用 RKObjectManager github.com/RestKit/RestKit/wiki/Object-mapping
    【解决方案2】:

    在 iOS 5.1+ 中有 NSJSONSerialization。

    【讨论】:

    • 如何使用 NSJSONSerialization ?
    【解决方案3】:

    这是一个使用 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) {
                                              }];
    

    【讨论】:

      【解决方案4】:

      您可以为此使用像 JSONKit 这样的开源库。它能够将 JSON 响应解析为 NSDictionary 或 NSArray。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-14
        • 1970-01-01
        • 2012-03-08
        • 2014-06-06
        • 1970-01-01
        相关资源
        最近更新 更多