1

大きなデータベースを処理できるように、JSON データを解析する方法を学ぼうとしています。Web サイトにログインするためのコードを書きました。

成功したログイン要求からの次の JSON データがあります。

JSON string : correct username and password [{"user_id":"7","first_name":"dada","last_name":"Kara","e_mail":"yaka@gmail","fullname":"Dada Kara","forum_username":"ycan"}]

次のコードを使用して解析しますが、解析しません

-(IBAction)loginButton:(id)sender{

    NSString *username = usernameTextfield.text; 
    NSString *password = passwordTextfield.text;

    NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:kPostUrl]];
    [request setHTTPMethod:@"POST"];

    NSString *post =[[NSString alloc] initWithFormat:@"e_mail=%@&password=%@", username, password];
    [request setHTTPBody:[post dataUsingEncoding:NSASCIIStringEncoding]];

    NSURLResponse *response;
    NSError *err;

    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
    //NSString *responseStr = [NSString stringWithUTF8String:[responseData bytes]];
    //NSLog(@"Response : %@", responseStr);

    NSString *json_string = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    NSLog(@"JSON string : %@", json_string);

    SBJsonParser *parser = [[SBJsonParser alloc] init];
    NSDictionary *responseObj = [parser objectWithString:json_string error:nil];
    NSArray *name = [responseObj objectForKey:@"first_name"];

    NSLog(@"Name : %@", name);
}

NSLogの名前の結果はNULL

問題はどこにあり、どのようにそのようなデータを解析できるので、行が多い場合はiPhoneのローカルFMDBデータベースに保存できます

- - - - - - - - - - - - - - - 編集 - - - - - - - - - - --------------------------------------------

実際の問題は、サーバーからの応答 JSON 文字列に文字列の最初のエコーが含まれていたため、json パーサーは二重引用符 "" の間のみを解析するため、文字列からエコーをトリミングして新しい文字列を解析するだけで済みました。

そしてビンゴ!

//trim in coming echo
    NSString *newString1 = [json_string stringByReplacingOccurrencesOfString:@"correct username and password\n" withString:@""];



    SBJsonParser *parser = [[SBJsonParser alloc] init];

    NSArray *responseObj = [parser objectWithString:newString1 error:nil];

    NSDictionary *dataDict = [responseObj objectAtIndex:0];

    NSString *userID = [dataDict objectForKey:@"user_id"];

    NSLog(@"user_id: %@", userID);

出力: user_id: 7

4

2 に答える 2

0

Mac App Store で Objectify (15 米ドル) や JSON Accelerator (0.99 米ドル) などのツールを使用して、object.firstName を実行するのと同じくらい単純なモデルを作成するデータ モデルを自動的に生成できます。

于 2012-05-14T19:38:52.110 に答える