SAX-JSON-Parser 1.1.0

SAX-JSON-Parser 1.1.0

测试已测试
Lang语言 Obj-CObjective C
许可证 Apache 2
发布上次发布2015年12月

David Hoerl维护。



  • 作者:
  • David Hoerl

SAX-JSON-Parser-ForStreamingData

变更日志

  • 1.1.0 3/28/2014
  • 提供第二个 MONGO_DBScheme
  • 新的协议方法,以使委托可以将 'new Date' 字符串转换为某种常用格式
  • 支持 CocoaPods(Podspec 现在位于 CocoaPods 中)

  • 1.0.0 2/26/2014 首次发布

说明

像下载时一样解析 JSON 数组,使用 NSJSONSerialization 将每个对象转换为原生格式,并将其返回给委托。

正如你所知道的,iOS 不提供流式 JSON 解析器——通常您需要保存所有数据,让用户等待,然后存储和处理数据。当数据正在下载时,是否会更酷地开始向用户展示数据,比如在一个表中呢?

这个类不仅简化了 JSON 数据的下载和转换,而且还支持 MongoDB 风格的 JSON,其中您有 objectIDnew date() 对象,这会导致 NSJSONSerialization 出错(即,它不会解析)。这个类所做的就是提取 ID,用包含该 ID 的简单字符串替换文本,并用空格覆盖额外的字节。

同样,可以处理 new date() 对象,并生成一个 ISO 格式的日期字符串来替换它们。请注意,在此代码中,所有日期都是单一种类的。如果你的 MongoDB 存储库有多个格式,你需要增强日期处理,或者只是返回包含的日期字符串,并在之后处理它们。

该过程通过分配和重新分配内存,直到它有足够的内存来保存第一个对象,随后只重新分配足够的内存来保存当前正在处理的对象(加上最后一个接收的包中的任何残余字节)。每当检测到对象时,这些字节就会传递到 NSJSONSerialization 中,并将输出存储在可变数组中。

每当检测到对象时,临时数组中的所有后续字节就会移动到开始处,然后重复检测过程。当处理所有数据字节后,如果创建了一个或多个对象,它们就会被发送到委托。

示例应用程序(和单元测试)从文本文件 JSON.txt(我的 GitHub 存储库项目的列表,以 JSON 格式)中读取数据,并以小块的方式(每个块之间有一定延迟,以模拟网络下载)将其馈送到解析器。

单元测试

单一的单元测试运行了一百万次循环,其中创建一个对象并发送从1到256字节的随机数据块,以验证数据中的一些特定“断点”不会导致问题。初始转换后的数组与预先计算的一个进行对比,以确保没有任何一个字节不同。

未来

第二个演示目标是真正使用网络下载数据。

致谢

大量代码来自我在Sailthruwww.sailthru.com)开发的代码,该公司允许我将其中的一部分开放源代码。

许可证

此代码受Apache许可证的约束,包含在本发行版中。