【问题标题】:parsing json - reached max depth解析 json - 达到最大深度
【发布时间】:2012-08-07 21:51:44
【问题描述】:

我想解析超过 500 个 cmets 的 reddit 帖子的 cmets。 比如这个:http://www.reddit.com/comments/xu11o json url为: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 个 cmets,我会得到 NSArray 并可以成功显示它们。

要获得 NSArray,我需要进行哪些更改?

【问题讨论】:

    标签: iphone json nsarray sbjson


    【解决方案1】:

    你试过苹果的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.
      
    

    只需确保在发货前将下载代码切换为异步即可。

    最好的问候。

    【讨论】:

      【解决方案2】:

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

      http://github.com/H2CO3/CarbonateJSON

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-09
            • 1970-01-01
            • 1970-01-01
            • 2015-12-21
            相关资源
            最近更新 更多