Ios 如何搜索JSON文件?

Ios 如何搜索JSON文件?,ios,json,xcode,Ios,Json,Xcode,我正在编写一个以JSON格式读取数据的应用程序。这应该是一个分类广告应用程序。例如,它从单独的JSON文件中获取类别、子类别和每个广告的列表。现在我想添加一个搜索选项。问题是,我不知道是否可以搜索JSON文件,以及搜索是否有效。有人有更好的方法吗?要从JSON文件中搜索,首先需要解析它 遵循以下步骤: NSData *theData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"fileName

我正在编写一个以JSON格式读取数据的应用程序。这应该是一个分类广告应用程序。例如,它从单独的JSON文件中获取类别、子类别和每个广告的列表。现在我想添加一个搜索选项。问题是,我不知道是否可以搜索JSON文件,以及搜索是否有效。有人有更好的方法吗?

要从
JSON
文件中搜索,首先需要解析它

遵循以下步骤:

NSData *theData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"fileName"ofType:@"json"]];
NSDictionary *myJSONData = [NSJSONSerialization JSONObjectWithData:theData options:NSJSONReadingMutableContainers error:nil];
获得
NSDictionary
后,您可以使用
NSPredicate
进行搜索


希望这将帮助您

查看以下两个链接,以便在iOS中解析Json文件:


如果您试图避免使用数据库,您只有几个选项。将它们加载到内存中(提前或延迟)。这样做的好处是以内存占用(空间与时间)为代价,使其速度更快。但在你的评论中,你说这会占用很多内存。另一个选项是每次加载和卸载每个JSON文档。但是,如果您担心由于文档数量而导致的内存占用,那么这可能会太慢。有一种变体,您可以创建自己的自制索引,但此时,您就开始创建自己的数据库了

所以,最后,听起来你在努力避免使用数据库

考虑CoreData或CoreData

如果您想使用简单的JSON文档,还可以考虑哪种是基于JSON文档的嵌入式文档DB(如MunGDB)。还有一种称为EJDBKit的工具

它的目标是成为一个类似MongoDB的快速库,可以嵌入到 C/C++、.Net、NodeJS、Python、Lua、Go、Java和Ruby应用程序 LGPL许可证的条款

EJDB是基于东京内阁修改版的C库

基于API实现的查询和数据的JSON表示 C BSON


假设您将ad数据存储在本地,那么另一个选项是使用SimpleDB,这是我编写的键/值数据存储。使用它,您可以存储JSON值,然后返回符合您需求的键。()

您的passingTest代码块一次只能解析1项,所以内存不会成为问题,这似乎是您最关心的问题

您的代码如下所示:

self.ads = [SimpleDB keysInTable:kAdsTable orderByJSONValueForKey:@"name" passingTest:^BOOL(NSString *key, NSString *value, NSDate *dateAdded, NSDate *dateModified) {
        Ad *ad = [[Ad alloc] initWithJSON:value];
        BOOL include = NO;

        // do testing here

        return include;
    }
}];
然后使用这些键获取TableView的行数,并在填充单元格时根据需要创建对象:

UITableViewCell *cell = AdCell;
Ad *ad = [[Ad alloc] initWithJson:[SimpleDB valueForKey:[self.ads[indexPath.row]] inTable:kAdsTable];
cell.ad = ad;
return cell;

// This is assuming you have a subclass of UITableViewCell to handle the population of the cell's contents.

看看这里,您可以将文档加载到NSArray中,然后过滤谓词:[nspreditate predicate-withblock^:…]@kgu87是的,这是我首先想到的。但是假设我在主页上,我想搜索一辆2008年的宝马。因此,应用程序必须开始将每个类别的详细信息解析为数组或字典,然后进行搜索。这肯定会导致内存不足!听起来你好像在试图建立一个广告信息数据库。在这种情况下,如果没有访问在线广告数据库,你必须下载所有的JSON文件,并根据这些信息建立一个数据库(sqlite或核心数据或其他),然后将其存储在设备上。对我来说,这听起来不是个好主意。您不必预先加载文件的内容。你可以得到文件名,然后在谓词中逐个检查它们。或者我知道需要解析courseOk的NSArray。但我正在写一个分类广告应用程序。当你在主页上搜索一个特定的项目时,所有的JSON对象都必须被解析成数组或字典。那不好!我需要另一个解决办法。我开始怀疑使用JSON是否可能。
UITableViewCell *cell = AdCell;
Ad *ad = [[Ad alloc] initWithJson:[SimpleDB valueForKey:[self.ads[indexPath.row]] inTable:kAdsTable];
cell.ad = ad;
return cell;

// This is assuming you have a subclass of UITableViewCell to handle the population of the cell's contents.