据我所知,Objective-C,JSON Framework,YAJL和Touch JSON有三个JSON解析器.然后,这三个将有自己的特点.
例如:
YAJL可以用作SAX样式解析器.
JSON Framework具有相对较长的历史并被广泛使用.
Touch JSON解析NSData而不是NSString.
另外,据我测试,性能比较的结果如下:
[fast] YAJL> JSON Framework> Touch JSON [slow].
如果您了解这些JSON解析器的优缺点,您能告诉我吗?
最后,如果你知道任何其他JSON Parser,请告诉我.
我们的应用程序必须使用最少的远程http请求显示大量数据,因此我们在后端添加了一个端点,它将所有必要的数据作为单个json响应提供.这导致~1.5MB(压缩)或大约8 MB的未压缩的json格式文本.
没有太大问题,它会在10到30秒内下载,我们正在使用ASIHTTPRequest将整个响应写入磁盘.
现在是有趣的部分 - 在将未压缩文件读入内存映射字符串后,我们使用stig的json-framework将其转换为NSDictionary.这对我们的应用程序的其余部分以及其他API端点的典型2 KB json响应非常有效.但是,将这8 MB数据反序列化需要几秒钟(模拟器)到几分钟(3G和第二代iPod Touch).
我正在研究读取所有这些数据的最佳方法.
我很乐意使用直接从后端提供的二进制plist,但是我们使用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" }
]
}
Run Code Online (Sandbox Code Playgroud)
将这个8 MB json格式的字符串读入内存中的NSDictionary的最有效方法是什么?