解析json - 达到最大深度

时间:2012-08-07 21:51:45

标签: iphone json nsarray sbjson

我想用500多条评论来解析reddit帖子的评论。 例如这一个:http://www.reddit.com/comments/xu11o json网址为:http://www.reddit.com/comments/xu11o.json

我在使用SBJson实现这一目标。 当我尝试使用此代码获取NSArray时: NSString* response = [request responseString]; NSArray* responseArray = [response JSONValue];

我收到以下错误消息:-JSONValue failed. Error is: Input depth exceeds max depth of 32 将深度更改为更高的数量(例如100)会使我的应用程序崩溃。

如果reddit帖子只有20条评论,我会获得NSArray并且可以成功显示它们。

我需要更改什么才能获得NSArray?

4 个答案:

答案 0 :(得分:2)

您是否尝试过Apple的NSJSONSerialization JSON解析库?它有效。

  NSString *urlString = @"http://www.reddit.com/comments/xu11o.json";

  NSURL *url = [NSURL URLWithString:urlString];
  NSURLResponse *response = nil;
  NSError *error = nil;
  NSData *data = [NSURLConnection sendSynchronousRequest:
                       [NSURLRequest requestWithURL:url] 
                       returningResponse:&response 
                       error:&error];

  id jsonObj = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
  // Do something with jsonObj which is an array.

请确保在发货前将下载代码切换为异步。

最好的问候。

答案 1 :(得分:0)

试试我的JSON解析器库,没有这样的限制:

http://github.com/H2CO3/CarbonateJSON

答案 2 :(得分:0)

SBJsonParser的这种“限制”是一种安全功能,可以保护您免受假定的恶意JSON攻击。该限制可通过maxDepth属性进行配置。正如您所发现的,默认值为32。您可以将其更改为所需的任何整数值,或通过将其设置为0来关闭最大深度检查。

答案 3 :(得分:0)

我和sbjson有同样的问题。将maxDepth(SBJsonParser.m)更改为128解决了问题。