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

Héc*_*mos 6 iphone json objective-c cocoa-design-patterns

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

没有太大问题,它会在10到30秒内下载,我们正在使用ASIHTTPRequest将整个响应写入磁盘.

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

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

我很乐意使用直接从后端提供的二进制plist,但是我们使用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" }
             ]
}
Run Code Online (Sandbox Code Playgroud)

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

joh*_*hne 7

看看JSONKit.它非常快,如果你的JSON有很多重复的键和值(这是常见的),它的"最近实例化的对象缓存"将大大减少用于"最终"的内存量NSDictionary.