【问题标题】:How to pase a JSON array in iphone sdk?如何在 iphone sdk 中解析 JSON 数组?
【发布时间】:2012-01-19 23:41:24
【问题描述】:

我有一个登录表单,用户只能使用有效的memberIDpassword 登录。如果用户输入正确的名称和密码,我会得到一个结果字符串,其中包含用户在注册过程中创建的用户信息,如果密码错误,则显示status 400 作为结果字符串,结果字符串是 json 数组其中包含上述值之一,一件事是如果成功登录,它会提供staus 200 以及用户信息,我需要从数组中检索状态消息,我需要在应用程序中验证它,如果登录成功(status 200)需要重定向到主页;如果是(status 400),则显示登录失败消息。 我的代码: 编辑

-(IBAction)_clicksbtnsignIN:(id) sender
{
    [_txtmemberId resignFirstResponder];
    [_txtpassword resignFirstResponder];

    NSString *connectionstring =  [[NSString alloc]initWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];

    if ([connectionstring length]==0) {
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:@"you are not connected to the internet" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil];
        [alert show];
        [alert release];        
    }       
    else
    {
        //NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        NSString *emailString = _txtmemberId.text; // storing the entered email in a string.            
        // Regular expression to checl the email format.

        NSString *emailReg = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";

        NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailReg];
        //[pool drain];

        if (_txtmemberId.text.length == 0  || _txtpassword.text.length == 0) {
            UIAlertView *alertblnk = [[UIAlertView alloc]initWithTitle:@"ALERT" message:@"Fill the required text fields" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil];

            [alertblnk show];

            [alertblnk release];
        }
        if (([emailTest evaluateWithObject:emailString] != YES) || [emailString isEqualToString:@""])
        {
            UIAlertView *loginalert = [[UIAlertView alloc] initWithTitle:@" Alert" message:@"Invalid Email ID" delegate:self
                                                       cancelButtonTitle:@"OK" otherButtonTitles:nil];

            [loginalert show];

            [loginalert release];
        } 
        else {

            [_spinner startAnimating];

            NSString *uname = _txtmemberId.text;

            NSString *pwd   = _txtpassword.text;

            NSString *urlVal = @"http://dev.eltouchapps.net/api/?app=1&type=m1&action=t2&var1=";

            NSString *urlVal1 = [urlVal stringByAppendingString:uname];

            NSString *urlVal2 = [urlVal1 stringByAppendingString:@"&var2="];

            NSString *urlVal3 = [urlVal2 stringByAppendingString:pwd];              

            NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)urlVal3,NULL,               (CFStringRef)@"\n" "",kCFStringEncodingUTF8 );
            NSURL *url = [NSURL URLWithString:encodedString];

            NSString *resultString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

            UIAlertView *loginalert = [[UIAlertView alloc] initWithTitle:@" Message" message:resultString delegate:self
                                                       cancelButtonTitle:@"OK" otherButtonTitles:nil];

            [loginalert show];                
           [loginalert release];

            lblresult.text = resultString;
            NSString *responseString = [resultString responseString]; 
            NSLog(@"Got Profile: %@", responseString); 

            NSMutableDictionary *responseJSON = [responseString JSONValue]; 
            NSString *firstName;
            if ([[responseJSON valueForKey:@"Status"] isEqualToString:@"200"]) // if success
            {

                ParallelReadViewController *detailViewController = [[ParallelReadViewController alloc] initWithNibName:@"ParallelReadViewController" bundle:nil];

                //detailViewController.firstString = firstString;
                // ...
                // Pass the selected object to the new view controller.

                [self.navigationController pushViewController:detailViewController animated:YES];

                [detailViewController release];
                // do something
                firstName = [responseJSON valueForKey:@"FirstName"];
            }
            }   
}
}

结果字符串是我从服务器获取的原因。我知道有我们想要的 JSONB 数组解析,但我不知道该怎么做。
提前致谢。

【问题讨论】:

  • @Maulik {"Status":"400"}如果用户名或密码无效
  • @Maulik{"status":"200"with firstnme,lastnme,id,time.....} 成功登录
  • 你试图解析什么???
  • NSString *responseString = [resultString responseString]; NSLog(@"得到配置文件:%@", responseString); NSMutableDictionary *responseJSON = [responseString JSONValue]; // NSString *firstString; NSString *firstName = [responseJSON objectForKey:@"400"]; if (400) { 没有任何反应,我也有 import#JSON

标签: iphone objective-c ios json cocoa


【解决方案1】:

根据您的响应假设,尝试以下代码

    NSString *resultString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];        
    NSMutableDictionary *responseJSON = (NSMutableDictionary *)[responseString JSONValue]; 
    NSString *firstName;
    if ([[responseJSON valueForKey:@"Status"] isEqualToString:@"200"]) // if success
    {
        // do something
        firstName = [responseJSON valueForKey:@"FirstName"];
    }

希望它能给你一个想法。

【讨论】:

  • 页面 ????我没有得到你真正想做的登录成功!我想你想切换到下一个视图。对吗?
  • NSString *responseString = [resultString responseString];错误:程序接收 sgrbt
  • 是的,如果登录成功,它想去下页
  • 请在我的问题中查看我的编辑,输入您的代码,有什么错误吗?
  • 你想用 NSString *responseString = [resultString responseString] 做什么; ???
【解决方案2】:

查看这个 JSON 框架:https://github.com/stig/json-framework/

【讨论】:

    猜你喜欢
    • 2012-11-11
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多