【问题标题】:NSJSONSerialization vs stream based parserNSJSONSerialization 与基于流的解析器
【发布时间】:2013-07-04 18:46:32
【问题描述】:

我的 iPad 应用程序需要解析一个 10 MB 的 JSON 文件并将其内容保存在 Core Data 中。

考虑到大文件大小和内存使用情况,您会推荐使用NSJSONSerialization,还是选择基于流的 JSON 解析器(在这种情况下,您会推荐哪种基于流的解析器)?顺便说一句:该文件是由另一个 iOS 应用使用NSJSONSerialization 创建的。

谢谢!

【问题讨论】:

  • 如果“基于流”是指类似于某些 XML 解析器的解析器,在这些解析器中,您“询问”特定数据位并“即时”提取,而不是解析整个文件并返回结果数据在一个“块”中,这种类型的 JSON 解析器很少。这在很大程度上是因为解析后的 JSON 的内部表示比 XML 的典型内部表示更紧凑,因此一次解析所有内容更实用。 (另外,您无法像使用 XML 那样保证 JSON 对象中的项目顺序。)

标签: ios json ios5 memory-management nsjsonserialization


【解决方案1】:

我推荐两者,因为NSJSONSerialization 有方法JSONObjectWithStream:options:error:


您可以改用this JSON parsing framework

【讨论】:

  • 但是从解析器构建的字典结构会在解析过程完成后立即分配 10 MB 的 RAM?这不会导致 iOS 内存警告吗?
  • 这取决于它是什么以及它的格式。 10MB 的 JSON 文本不一定等于 10MB 的内存数据。如果它的内存很大,那么你不想在任何时间点加载(所以你不想解析)整个东西。
  • 一般来说,JSON 文件的解析表示会比源文件大一点(可能是 3-5 倍)。 JSON 中的“糖”很少,JSON 中的所有字符串都需要在解析器输出中表示。字符串将被扩展为 2 字节或 4 字节的表示形式,此外它们还有对象开销,以及管理语言数组和字典的开销。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 2013-09-24
  • 2012-08-28
  • 2011-01-07
  • 1970-01-01
  • 2012-01-28
相关资源
最近更新 更多