【问题标题】:iOS Error Parsing JSONiOS 解析 JSON 时出错
【发布时间】:2014-08-01 21:25:08
【问题描述】:

我是 iOS 新手。我有需要解析的 JSON 数据:

{  
   "allseries":[  
      {  
         "type":"HR",
         "title":"Heart Rate",
         "xLabel":"Time",
         "yLabel":"Beats per Min",
         "defaultUnit":"BPM",
         "url":"info/info?user=admin%40korrent.com&type=HR",
         "size":18,
         "firstTs":1406755651,
         "lastTs":1406841254
      },
      {  
         "type":"TEMP",
         "title":"Temperature",
         "xLabel":"Time",
         "yLabel":"Temperature",
         "defaultUnit":"F",
         "url":"info/info?user=admin%40korrent.com&type=TEMP",
         "size":6,
         "firstTs":1406854147,
         "lastTs":1406854283
      }
   ],
   "status":"OK"
}

到目前为止,这是我的代码:

NSString *dataReceived= [[NSString alloc] initWithData:_responseData encoding:NSUTF8StringEncoding];
NSLog(@"--> async response data (string): %@", dataReceived);
NSData *jsonData = [dataReceived dataUsingEncoding:NSUTF8StringEncoding];
NSError *jsonError;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:nil error:&jsonError];
NSLog(@"JSON key and value %@", [dict description]);
NSLog(@" %@ ", dict[@"allseries"]);
NSString *jsonString=dict[@"allseries"];
   if (_programState == 4){
    NSLog(@"state is 4");
    NSLog(@"%@",jsonString);
    NSData *Data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

但是,代码为这一行抛出了无效参数异常:

 NSData *Data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

此外,jsonString 似乎完全“无法操作”。我无法拆分它,将字符串附加到它等等。那么有什么问题?

【问题讨论】:

  • 您有_responseData,只需在NSJSONSerialization JSONObjectWithData 中使用它即可添加不仅需要而且不正确的代码。

标签: ios json parsing nsstring


【解决方案1】:
// The following two lines are just for logging and otherwise are not needed.
NSString *dataReceived= [[NSString alloc] initWithData:_responseData encoding:NSUTF8StringEncoding];
NSLog(@"--> async response data (string): %@", dataReceived);

// Deserialize the JSON data into a dictionary
NSError *jsonError;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData: _responseData options:nil error:&jsonError];
NSLog(@"JSON key and value %@", dict);

// Get the array from the dictionary element "allseries".
NSArray *jsonArray = dict[@"allseries"];
NSLog(@"jsonArray: %@", jsonArray);

这里 jsonArray 是 JSON 中“allseries”的字典数组

【讨论】:

  • 嗯,但是为什么 iOS 允许你在运行时将 NSString 设置为 NSArray?只有当您尝试执行操作时,iOS 才会抛出异常。这没有任何意义。
  • 当你向下转换一个类型时,编译器会说:“好的,我希望你知道你在做什么,如果你错了,在运行时会有后果”。然后,当您调用一个不存在的方法时,运行时会说:“哇,这不是类实例上的方法,我要崩溃了——或者其他什么!”。如果是加拿大人它也会说:“对不起”,加拿大人太客气了,嗯?
  • 谢谢你的解释,虽然我觉得我不太明白你对加拿大人的看法
【解决方案2】:

你所做的完全,完全错误。

dict[@allseries] 不是 NSString。它是一个有两个元素的 NSArray,它的两个元素都是 NSDictionary。

【讨论】:

  • 这与问题中的问题无关。虽然当原始问题得到解决后,这将是一个问题。
  • Maddy,再看一遍代码。他正在提取 NSArray 并将其视为 NSString。您所说的效率低下,但不是阻止它工作的问题。
  • 我没有说你的回答没有问题。我是说 OP 的直接问题是阻止代码解决您指出的问题。您指出的内容不会导致问题中的错误。
猜你喜欢
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多