2012-05-14 18 views
1

大きなデータベースを処理できるようにJSONデータを解析する方法を学習しようとしています。私はウェブサイトにログインするコードを書いた。JSONパーサがNullを返す

私は成功したログイン要求からJSONデータを以下している:

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

と私は解析するが、それは名前のための私のNSLogから

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

に結果をそれを解析doesntの次のコードを使用するには、NULLです

どこが問題なのですか?そのようなデータを解析するにはどうすればよいですか?多くの行については、ローカルのFMDBデータベースに保存できますiPhoneで

------------------------------ EDIT ------------ -------------------------------------------------- -

実際の問題は応答でした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

+3

JSON文字列は辞書を含む配列なので、まず辞書を抽出して解析します。 – MByD

+0

私はあなたが言及したものの次のように推測しますが、私はまだNULLを取得します –

答えて

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

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

NSDictionary *dataDict = [responseObj objectAtIndex:0]; 

NSString *name = [dataDict objectForKey:@"first_name"]; 

はあなたがレシーブデータを印刷しましたか?サーバーからデータを受信して​​いますか?はいの場合は、別のエンコーディングを試してください。

+0

これはまだ私にnullを返します –

+0

私の更新されたansを見てください – Mangesh

+0

はいNSLog(@ "JSON文字列:%@"、json_string); 'prints' JSON文字列:正しい名前とパスワード[{"" user_id ":" 7 "、" first_name ":" dada "、" last_name ":" Kara "、" e_mail ":" [email protected] "、" fullname ":" Dada Kara " forum_username ":" ycan "}] '異なるエンコーディングでどういう意味ですか? –

0

Mac App StoreでObjectify($ 15 US)やJSON Accelerator($ 0.99 US)のようなツールを使用すると、object.firstNameのように簡単にモデルを作成できるデータモデルを自動的に生成できます。