4

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 データを読み取り可能なオブジェクトにするにはどうすればよいですか? ありがとう

4

4 に答える 4

5

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;

}
于 2012-08-21T12:34:49.463 に答える
2

以下は、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) {
                                          }];
于 2015-02-23T17:18:50.120 に答える
2

iOS 5.1+ には NSJSONSerialization があります。

于 2012-08-21T12:27:32.877 に答える
1

そのためには、 JSONKitなどのオープン ソース ライブラリを使用できます。JSON 応答を NSDictionary または NSArray に解析できます。

于 2012-08-21T12:00:30.727 に答える