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

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

赵晨
2023-03-14
问题内容

我们的应用程序必须以最少的远程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的最有效方法是什么?


问题答案:

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



 类似资料:
  • 问题内容: 说我有: 现在,我要将int值转换为String。哪种方法更有效? 我只是好奇是否有真正的区别,或者一个比另一个更好? 问题答案: 测试了10m分配的数字10 一个似乎赢了 编辑:JVM是Mac OS X 10.5下的标准’/ usr / bin / java’ 更多编辑: 要求的代码 情况2和3同样 使用

  • 问题内容: 除了遍历所述集合的内容并将每个项目手动推入数组之外,是否有更有效的方法将HTMLCollection转换为数组? 问题答案: var arr = Array.prototype.slice.call( htmlCollection ) 使用“本地”代码将具有相同的效果。 编辑 由于这有很多观点,请注意(按@oriol的评论),以下更简洁的表达 实际上 等效: 但是,请注意@JussiR

  • 问题内容: 我正在使用MySQLdb和Python。我有一些基本的查询,例如: 我需要“结果”作为NumPy数组,并且我希望在内存消耗方面节省成本。似乎逐行复制数据效率极低(将需要两倍的内存)。有没有更好的方法将MySQLdb查询结果转换为NumPy数组格式? 我之所以要使用NumPy数组格式,是因为我希望能够轻松地对数据进行切片和切块,在这方面,python对多维数组似乎并不友好。 谢谢! 问题

  • 问题内容: 我将以下数据另存为: 我想将此数据转换为包含键值对的。 我首先尝试将转换为 JSON 对象,如下所示: 但是,当我尝试: 我收到的值为。 任何人都可以提出问题所在吗? 问题答案: 我相信您误解了JSON格式的键值。您应该将字符串存储为 现在,如果您遵循NSLog语句 结果将是另一个NSDictionary。 希望这有助于获得清晰的理解。

  • 问题内容: 我想出了 但是我不确定v8的行为如何,例如,它将真正删除其他键还是仅删除引用,然后垃圾收集器稍后会咬我? 另外,我创建了这些测试,希望您可以在此处添加答案,以便我们了解它们的匹配情况。 编辑1: 显然,根据测试,如果我们不检查键是否已经为小写字母,则速度会更快,但撇开速度来看,如果忽略此键并仅创建新的小写键,会不会造成混乱?垃圾收集者对此感到满意吗? 问题答案: 我想出的最快的方法是创

  • 问题内容: 将单个char传递给需要CharSequence的方法的最有效方法是什么? 这就是我得到的: 根据此处给出的答案,在输入为字符数组的情况下,这是一种明智的做法。我想知道是否可以在单字符案例中应用偷偷摸摸的快捷方式。 问题答案: textView.setText(String.valueOf(c))