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

Iphone 什么';将10 MB JSON响应转换为NSDictionary的最有效方法是什么?,iphone,objective-c,json,cocoa-design-patterns,Iphone,Objective C,Json,Cocoa Design Patterns,我们的应用程序必须以最少的远程http请求显示大量数据,因此我们在后端添加了一个端点,该端点以单个json响应的形式提供所有必要的数据。这将导致约1.5MB(压缩)或约8Mbs的未压缩json格式文本 没什么问题,它只需10-30秒即可下载,我们使用AsittpRequest将整个响应写入磁盘 有趣的是,将未压缩文件读入内存映射字符串后,我们使用stig将其转换为NSDictionary。这对于我们应用程序的其余部分非常有效,对于我们API端点的其余部分,这是典型的2 KB json响应。然而,

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

没什么问题,它只需10-30秒即可下载,我们使用AsittpRequest将整个响应写入磁盘

有趣的是,将未压缩文件读入内存映射字符串后,我们使用stig将其转换为NSDictionary。这对于我们应用程序的其余部分非常有效,对于我们API端点的其余部分,这是典型的2 KB json响应。然而,反序列化这些8Mbs的数据需要几秒钟(模拟器)到几分钟(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" }
             ]
}

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

看一看。它非常快,如果您的JSON有很多重复的键和值(这很常见),那么它的“最近实例化的对象缓存”将大大减少用于“final”
NSDictionary

的内存量。虽然JSONKit比YAJL快,但YAJL支持对流进行解析。您应该能够在下载JSON时使用ASIHTTPRequest对其进行连接以解析JSON。在此处查看标记为“数据可用时文档样式解析”的部分:


您能将其拆分成更小的文件,并根据需要读取每个文件吗?或者你一次需要全部8MB吗?必须使用:egads。你怎么能在这么小的屏幕上显示8MB的文本?我会采用另一种可能更有效的方法。它不会一次显示所有内容。这是一个交互式电视节目指南,分为一个小时的区块,每个区块有900个频道。因此,它是~7*24个顺序表视图,每个视图都有>900个程序。用户目前可能只需要前4个小时左右,但要求他必须能够不间断地获取任何其他天/时间。起初我一次只下载4个小时的数据,但跟踪核心数据中哪些可用,哪些需要下载的代码太复杂,无法维护,所以我们选择一次下载所有数据。非常酷。我以前没见过这个。我很想知道8MB数据的速度有多快。+1我忘记了这个项目!谢谢你的提醒。:)使用JSONKit运行了一些基准测试,获得了200%的改进。很好的建议。修改了Sam Soffes的基准测试工具以使用我的json字符串运行。将此运行的迭代次数减少到10次,之后将在最初的100次运行。JSONKit提前出现了:是否有一个快速的教程来开始使用JSONKit?