解析JSON没有Restkit iOS的对象映射(Parsing JSON without Obje

2019-06-27 05:23发布

我创建它使用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数据为可读的对象? 谢谢

Answer 1:

你可以简单地调用parsedBody:你RKResponse对象零和返回的对象赋给一个NSDictionary:

responseDict = [response parsedBody:nil];

而作为一个额外的检查我用一个小的方便的方法来检查AA成功响应:

- (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;

}


Answer 2:

在iOS版5.1+有NSJSONSerialization。



Answer 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) {
                                          }];


Answer 4:

你可以使用一个开源库一样JSONKit了点。 它能够解析JSON响应到的NSDictionary的NSArray或。



文章来源: Parsing JSON without Object Mapping in Restkit iOS