支持 CocoaPods(Podspec 现在位于 CocoaPods 中)
1.0.0 2/26/2014 首次发布
像下载时一样解析 JSON 数组,使用 NSJSONSerialization 将每个对象转换为原生格式,并将其返回给委托。
正如你所知道的,iOS 不提供流式 JSON 解析器——通常您需要保存所有数据,让用户等待,然后存储和处理数据。当数据正在下载时,是否会更酷地开始向用户展示数据,比如在一个表中呢?
这个类不仅简化了 JSON 数据的下载和转换,而且还支持 MongoDB 风格的 JSON,其中您有 objectID 和 new date() 对象,这会导致 NSJSONSerialization
出错(即,它不会解析)。这个类所做的就是提取 ID,用包含该 ID 的简单字符串替换文本,并用空格覆盖额外的字节。
同样,可以处理 new date() 对象,并生成一个 ISO 格式的日期字符串来替换它们。请注意,在此代码中,所有日期都是单一种类的。如果你的 MongoDB 存储库有多个格式,你需要增强日期处理,或者只是返回包含的日期字符串,并在之后处理它们。
该过程通过分配和重新分配内存,直到它有足够的内存来保存第一个对象,随后只重新分配足够的内存来保存当前正在处理的对象(加上最后一个接收的包中的任何残余字节)。每当检测到对象时,这些字节就会传递到 NSJSONSerialization
中,并将输出存储在可变数组中。
每当检测到对象时,临时数组中的所有后续字节就会移动到开始处,然后重复检测过程。当处理所有数据字节后,如果创建了一个或多个对象,它们就会被发送到委托。
示例应用程序(和单元测试)从文本文件 JSON.txt
(我的 GitHub 存储库项目的列表,以 JSON 格式)中读取数据,并以小块的方式(每个块之间有一定延迟,以模拟网络下载)将其馈送到解析器。
单一的单元测试运行了一百万次循环,其中创建一个对象并发送从1到256字节的随机数据块,以验证数据中的一些特定“断点”不会导致问题。初始转换后的数组与预先计算的一个进行对比,以确保没有任何一个字节不同。
第二个演示目标是真正使用网络下载数据。
大量代码来自我在Sailthru(www.sailthru.com)开发的代码,该公司允许我将其中的一部分开放源代码。
此代码受Apache许可证的约束,包含在本发行版中。