【问题标题】:How to fetch data from webserver using JSON in iphone如何在 iPhone 中使用 JSON 从网络服务器获取数据
【发布时间】:2011-06-14 07:11:47
【问题描述】:

我想使用 JSON 和网络服务从网络服务器获取数据,然后解析 JSON 响应字符串。 然后我需要将从网络服务器获得的数据插入到 sqlite 数据库中。 我已经通过 HTTP post 方法将数据发布到服务器 api 数据库,这工作正常,我的数据正在保存到我的服务器数据库中。我得到的响应是这种格式:

    {"TokenID":"od28Denamu","isError":false,"ErrorMessage":"","Result":[{"UserId":"153","FirstName":"Rocky","LastName":"Yadav","Email":"rocky@itg.com","ProfileImage":null,"ThumbnailImage":null,"DeviceInfoId":"12"}],"ErrorCode":900}

我需要解析 json 数据并将其保存在我的本地 sqlite 数据库中,该数据库包含与服务器数据库相同的数据库表

这是我的代码:

    //this is used to post the data to web server database through HTTP POST method
    -(void)sendRequest
    {
        UIDevice *device = [UIDevice currentDevice];
        NSString *udid = [device uniqueIdentifier];
        NSString *sysname = [device systemName];
        NSString *sysver = [device systemVersion];
        NSString *model = [device model];
        NSLog(@"idis:%@",[device uniqueIdentifier]);
        NSLog(@"system nameis :%@",[device systemName]);
        NSLog(@"System version is:%@",[device systemVersion]);
        NSLog(@"System model is:%@",[device model]);
        NSLog(@"device orientation is:%d",[device orientation]);
        NSString *post = [NSString stringWithFormat:@"Loginkey=%@&Password=%@&DeviceCode=%@&Firmware=%@&IMEI=%@",txtUserName.text,txtPassword.text,model,sysver,udid];
        NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
        NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 
        NSLog(@"%@",postLength);
        NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
            //this is my web server api method which consist of 5 parameters Loginkey,Password,DeviceCode,Firmware,IMEI
    Loginkey takes Username of user
    Password takes password of user
    DeviceCode takes device model
    Firmware takes device Version
    IMEI takes uniqueidentifier of device.
        [request setURL:[NSURL URLWithString:@"http://192.168.0.68:91/JourneyMapperAPI?RequestType=Login"]]; 
        [request setHTTPMethod:@"POST"]; 
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
        [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
        [request setHTTPBody:postData];

        NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

        if (theConnection) {
            webData = [[NSMutableData data] retain];
            NSLog(@"%@",webData);
        }
        else 
        {

        }

    }





    -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
    {   
        [webData setLength: 0]; 
    } 

    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
    {         
        [webData appendData:data]; 

    } 

    -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
    {     
        [connection release];  
        [webData release]; 

    } 
    //this is used to fetch the data through JSON .
    -(void)connectionDidFinishLoading:(NSURLConnection *)connection 
    {      
        //NSString *loginStatus = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding]; 




        NSString *loginStatus = [[NSString alloc] initWithData:webData encoding:NSUTF8StringEncoding];
        NSLog(@"%@",loginStatus);
        self.webData = nil;

        NSArray* latestLoans = [(NSDictionary*)[loginStatus JSONValue] objectForKey:@"Login"];
        [loginStatus release];

        //get latest loan
        NSDictionary* loan = [latestLoans objectAtIndex:0];

        //fetch the data
        NSString* fundedAmount = [loan objectForKey:@"Loginkey"];
        NSString* loanAmount = [loan objectForKey:@"Password"];
        NSLog(@"this is foundedamount:%@",fundedAmount);
        NSLog(@"this is loanAmount:%@",loanAmount);

        //float outstandingAmount = [loanAmount floatValue] - [fundedAmount floatValue];

        //NSString* name = [loan objectForKey:@"name"];
        //NSString* country = [(NSDictionary*)[loan objectForKey:@"location"] objectForKey:@"country"];

        //set the text to the label
        //label.text = [NSString stringWithFormat:@"Latest loan: %@ from %@ needs another $%.2f, please help",
                      //name,country,outstandingAmount
                     // ];

        //greeting.text = loginStatus;   
        [loginStatus release];           
        [connection release];  
        [webData release]; 
    } 

但是当我通过 JSON 代码获取数据时的问题不工作,发布到服务器工作正常。

当我获取数据时显示NSLOG(@"this is foundedamount:null") 值。可能是什么问题。请帮我解决这个问题。

谢谢

【问题讨论】:

    标签: iphone objective-c json


    【解决方案1】:

    如果你的问题是解析一个json字符串,为什么不用https://github.com/stig/json-framework这样的简单json库呢?

    【讨论】:

      猜你喜欢
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多