小编典典

iPad-解析一个非常巨大的json-文件(介于50和100 mb之间)

json

我正在尝试在iPad上解析一个非常大的json文件。文件大小将在50到100
mb之间变化(有一个初始文件,每个月会有一组新的完整数据,这些数据将被下载,解析并保存到coredata中)

我正在为一家公司作为企业解决方案构建此应用程序-
json文件包含敏感的客户数据,需要将其保存在本地的ipad上,因此即使离线也可以使用。当文件小于20mb时它可以工作,但是现在数据集变得更大了,我真的需要解析它。我在解析过程中收到内存警告,在第三次警告之后它崩溃了。我有几个不同的Core
Data实体,我只是设置所有来自json文件的值(当应用程序首次启动时),完成所有操作后,我就在执行[context save]

我希望有人能给我一些有关如何处理如此大文件的建议。我当时正在考虑将json文件拆分为几个较小的json文件,并可能将它们解析为多个线程,但是我不知道这是否是正确的方法。我猜一个大问题是整个文件都保存在内存中-
也许有某种方式可以将其“流式传输”到内存中或类似的东西?

我正在使用JSONKit(https://github.com/johnezang/JSONKit)来解析文件,因为我已经读到它是最快的文件(也许有一个较慢的文件可以在内存上使用吗?)。

提前致谢。


阅读 562

收藏
2020-07-27

共1个答案

小编典典

1)将数据写入文件,然后使用NSData的 dataWithContentsOfFile:options:error: 并指定
NSDataReadingMappedAlwaysNSDataReadingUncached
标志。这将告诉系统使用mmap()来减少内存占用量,而不是用内存块来负担文件系统缓存(这会使它变慢,但对iOS的负担要小得多)。

2)您可以使用YAJL SAX风格的JSON解析器在解码时获取对象。

注意:我尚未完成2),但已使用1)中包含的技术。

3)我自己最终需要这样的东西,并编写了可以与任何异步下载器(包括我自己的异步下载器)绑定的SAX-JSON-Parser-
ForStreamingData

2020-07-27