当前位置: 首页 > 面试题库 >

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

程瑞
2023-03-14
问题内容

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

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

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

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

提前致谢。


问题答案:

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

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

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

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



 类似资料:
  • 我在解析一个巨大的json文件(200mb)时遇到问题。起初,我尝试使用JACKSON将json解析为一棵树。然而,我遇到了堆大小问题。出于某种原因,增加堆大小不是一个选项。 JSON格式: 我想做的是产生像这样的弦 有没有办法做到这一点而不出现堆问题? 在python中,有一种简单的方法可以做到这一点,而且没有堆问题(没有JVM) 一些想法:我可能不需要使用杰克逊树方法,因为我只想要字符串。流媒

  • 问题内容: 我正在尝试使用gson库(http://code.google.com/p/google-解析一些巨大的JSON文件(例如http://eu.battle.net/auction- data/258993a3c6b974ef3e6f22ea6f822720/auctions.json )JAVA中的gson / )。 我想知道解析这种大文件(约80k行)的最佳方法是什么,以及您是否知道

  • 问题内容: 我正在尝试将DMOZ内容/结构XML文件解析为MySQL,但是所有现有的脚本都已经很老了并且不能很好地工作。如何在PHP中打开大型(+ 1GB)XML文件进行解析? 问题答案: 只有两个php API真正适合处理大文件。第一个是旧的expatapi,第二个是较新的XMLreader函数。这些api读取连续流,而不是将整个树加载到内存中(这是simplexml和DOM所做的)。 例如,您

  • 我正在尝试用jackson SAX解析器实现JSON数组迭代器(请不要问为什么)。我的应用程序应该处理巨大的文件(高达5 MiB),这是一个问题。 这就是我初始化JsonParser和调用迭代器创建的方式。我创建了InputStream,使用放在\raw文件夹中的JSON初始化。 这是我的迭代器类。 它似乎运转良好...哦,等等。 我在某个巨大的文件中有3个部分(命名数组)。它首先成功解析(一个很

  • 这个问题类似于常规WebClient请求中的Spring反应式流数据,不同之处在于我没有立即从我的WebClient获得JSON数组,而是类似于这样: 这个JSON对象可能非常大(约100MB),因此需要处理并流到客户端,而不是解析。这是我似乎能够正确获得语义学的唯一方法: 但是这意味着我要在内存中反序列化100MB或更多,然后从中创建一个通量。我想知道的是:我是否错过了一些关键的东西?我能以某种