简体   繁体   English

JSON解析器不适用于目标C

[英]JSON parser doesn't work objective c

Some days ago I tryid to read and parse data from server. 几天前,我尝试从服务器读取和解析数据。 But today it doesn't work. 但是今天它不起作用。 What can be wrong? 有什么事吗 Here I out my method: 在这里,我列出了我的方法:

 -(void) getDataFromServer
 {
     act = @"linkinginit";
     deviceid = @"1xyhgjs";
     fullRequest = [NSString stringWithFormat:@"http://app.ivson.by/?act=%@&deviceid=%@",    act, deviceid];
    NSLog(@"%@", fullRequest);
    NSURL *url = [NSURL URLWithString:fullRequest];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];

    NSData *returnData = [NSURLConnection sendSynchronousRequest: theRequest returningResponse: nil error: nil];


  NSString *strData = [[NSString alloc]initWithData:returnData encoding:NSUTF8StringEncoding];
  NSRange   searchedRange = NSMakeRange(0, [strData length]);
  NSLog(@"Data from server = %@", strData);
  NSString *json = strData;
    //   NSString *json = @"{\"code\":200,\"serviceID\":\"53d22b10e46a5\",\"sender\":1,\"hasPair\":0}";
   NSData *jsonData = [json dataUsingEncoding:NSUTF8StringEncoding];
   NSError *error = nil;
   id obj = [NSJSONSerialization JSONObjectWithData:jsonData
                                         options:0
                                           error:&error];
if (obj) {
    NSAssert([obj isKindOfClass:[NSDictionary class]], @"Expected a dictionary");
    NSDictionary *dictObj = (NSDictionary *)obj;
    NSNumber *code = dictObj[@"code"];
    NSLog(@"code:", code);
    NSString *serviceId = dictObj[@"serviceID"];
    NSLog(@"serviceId:", serviceId);
    NSNumber *sender = dictObj[@"sender"];
    NSLog(@"sender:",sender);
    NSNumber *hasPair = dictObj[@"hasPair"];
    NSLog(@"hasPair:", hasPair);

} else {
    NSLog(@"Failed to parse JSON: %@", [error localizedDescription]);
}

} }

And output is like this. 输出是这样的。 I need to have all variables(code, serviceId, sender and hasPair) separate. 我需要将所有变量(代码,serviceId,发送者和hasPair)分开。

  2014-07-28 11:46:41.640 Nanny[1445:11303] http://app.ivson.by/?   act=linkinginit&deviceid=1xyhgjs
 2014-07-28 11:46:41.923 Nanny[1445:15b03] ADDRESPONSE - ADDING TO MEMORY ONLY: http://app.ivson.by/?act=linkinginit&deviceid=1xyhgjs
 2014-07-28 11:46:41.924 Nanny[1445:11303] Data from server = {"code":200,"serviceid":"53d60c7cc35f1","sender":1,"hasPair":0}
 2014-07-28 11:46:41.924 Nanny[1445:11303] code:
 2014-07-28 11:46:41.925 Nanny[1445:11303] serviceId:
 2014-07-28 11:46:41.925 Nanny[1445:11303] sender:
 2014-07-28 11:46:41.925 Nanny[1445:11303] hasPair:

Thank you. 谢谢。

in NSLog, you're not passing type of arguments. 在NSLog中,您没有传递参数类型。 Try this 尝试这个

if (obj) {
    NSAssert([obj isKindOfClass:[NSDictionary class]], @"Expected a dictionary");
    NSNumber *code = obj[@"code"];
    NSLog(@"code: %@", code);
    NSString *serviceId = obj[@"serviceID"];
    NSLog(@"serviceId: %@", serviceId);
    NSNumber *sender = obj[@"sender"];
    NSLog(@"sender: %@",sender);
    NSNumber *hasPair = obj[@"hasPair"];
    NSLog(@"hasPair: %@", hasPair);

} else {
    NSLog(@"Failed to parse JSON: %@", [error localizedDescription]);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM