一尘不染

将10 MB JSON响应转换为NSDictionary的最有效方法是什么?

json

我们的应用程序必须以最少的远程http请求显示大量数据,因此我们在后端添加了一个终结点,该终结点将所有必要的数据作为单个json响应提供。这导致〜1.5MB(压缩)或大约8MB的未压缩json格式的文本。

没什么大问题,它会在10到30秒内下载完毕,我们正在使用ASIHTTPRequest将整个响应写入磁盘。

现在来了有趣的部分-将未压缩的文件读入内存映射的字符串后,我们使用stig的json-
framework
将其转换为NSDictionary。对于我们其余的应用程序以及对于其余API端点的典型2 KB
json响应,此方法都非常有效。但是,对这8 MB数据进行反序列化需要几秒钟(模拟器)到几分钟(3G和第二代iPod Touch)。

我正在研究读取所有这些数据的最佳方法。

我很想使用直接从后端提供服务的二进制plists,但是我们使用的是Java,但我还没有找到适合我们要求的适当的库,而且由于期限如此紧迫,编写自己的库可能不是最好的主意。

如果有任何帮助,我们正在解析的json字符串主要是X个项目的数组,如下所示:

{
    "items": [ { "key1": "value1", "key2": "value2" },
               { "key1": "value1", "key2": "value2" },
               { "key1": "value1", "key2": "value2" },
               { "key1": "value1", "key2": "value2" },
               { "key1": "value1", "key2": "value2" },
               { "key1": "value1", "key2": "value2" }
             ]
}

将这8 MB json格式的字符串读入内存中的NSDictionary的最有效方法是什么?


阅读 217

收藏
2020-07-27

共1个答案

一尘不染

看看JSONKit。这是非常快的,并且如果您的JSON有很多重复执行的键和值(很常见),则其“最近实例化的对象缓存”将大大减少用于“最终”的内存量NSDictionary

2020-07-27