为IOS解析器组织JSON的最佳方法

时间:2012-06-14 23:55:16

标签: ios json

我正在使用NSJSONSerialization从我的网络服务中解析一些JSON,我想知道最有效的方法来解决它。

目前我以这种格式生成JSON:

[
  {"title":"title Val","description":"description val","appointmentDate":"2012-06-16T00:00:00"},
  {"title":"title Val","description":"description val","appointmentDate":"2012-06-16T00:00:00"},
  {"title":"title Val","description":"description val","appointmentDate":"2012-06-16T00:00:00"}
]

解析器构造一个NSArray,其中每个元素都是NSDictionary,其中包含约会详细信息(标题,描述,日期)。

现在我的应用程序实际上需要在解析的JSON中搜索具有某个时间间隔之间的日期的约会,以便它可以根据某些用户操作显示它们。目前我只扫描阵列并检索符合条件的任何约会。这当然是O(n)。当我想搜索特定字段时,我应该以不同方式表示我的JSON吗?也许是这样的?

{
  "2012-06-16T00:00:00" : {"title":"title Val","description":"description val"},
  "2012-06-18T00:00:00" : {"title":"title val","description":"description val"},
  "2012-06-20T00:00:00" : {"title":"title val","description":"description val"},
}

这样解析器将生成NSDictionary,其中每一行的键是约会日期。这样做效率更高,还是可以快速对NSArray NSDictionary[row objectForKey:@"appointmentDate"]对象执行二进制搜索?如果搜索了数组,则需要在比较谓词中执行{{1}},这可能是一项昂贵的操作。

2 个答案:

答案 0 :(得分:1)

如果约会是有序的,只需进行二分搜索而不是线性搜索。除非你有成千上万的物品,否则它可能会足够快。

但是,花费大量时间的一件事是重新解析日期。 NSDates创建起来很慢,因此我建议您在读入列表时创建它们一次,或者将字符串转换为数字值,例如自1970年以来的秒数,这些值很快就可以比较。

答案 1 :(得分:1)

如何解析约会并使用Core Data这样的内容存储它们,并在要搜索的字段上设置索引?这可能比尝试手动优化和搜索更简单,更快捷。

虽然如果你想手动完成,那么建立一个由你想要搜索的信息键入的排序索引将为你提供更有效的搜索。因此,您可以将您的字典映射NSDate(不要将数据保存为字符串格式)到该日期的约会集,然后您可以对该字符集进行二进制搜索。字典(确保它首先正确排序!)以确定搜索间隔内的键范围。然后你可以进入字典并获取相应的约会。