我从 Web 服务中获取了一个大的 JSON 字符串 (11MB)。当我使用 JSONKit 解析数据时,我的应用程序达到 70MB,我收到内存警告,并且应用程序崩溃。
如何解析这些数据?
最好的办法是查看支持事件驱动解析的 YAJL JSON 解析器。然后,您可以在数据馈送中解析 JSON,而不必一次将整个内容存储在内存中。
https://github.com/gabriel/yajl-objc
抱歉,我不知道有任何代码示例可以在实践中演示这种用法。
最简单的解决方案是减少您从服务器获得的 json 大小。如果你不能这样做,解析巨大 JSON 的唯一方法是使用惰性求值。
我认为没有支持惰性评估的objective-c 的JSON 库。但是你可以实现一个。
SBJson 支持解析数据流。这使您可以一点一点地处理您的文档,因此您无需保留整个文档。该发行版包含两个如何使用它的示例。首先是StreamParserIntegrationTest.m,然后是TweetStream演示应用程序:一个 Twitter 应用程序,它将整天(如果你允许的话)坐下来解析一个 HTTP 流,在它们进入时显示每条推文,然后将它们丢弃。
(免责声明:我是 SBJson 的作者。)
11 mb 是一个大数据,解决方案只是为了最小化你的数据大小 JSON 支持不是 iOS 原生的,但是有一个很好的框架可以达到这个目的:http ://code.google.com/p/json-framework/
该框架支持从原始 JSON 对象到 Objective-C 对象(NSArray、NSDictionary)的转换,反之亦然。