3

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

4

4 回答 4

4

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

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

考虑 CoreData 或SqlLite

如果您想使用简单的 JSON 文档,还可以考虑EJDB,它是基于嵌入式 JSON 文档的文档数据库(如 MongoDb)。还有一个用于 EJDB 的Objective-c 包装器,称为 EJDBKit。

它旨在成为一个快速的类似 MongoDB 的库,可以根据 LGPL 许可嵌入到 C/C++、.Net、NodeJS、Python、Lua、Go、Java 和 Ruby 应用程序中。

EJDB 是基于 Tokyo Cabinet 修改版的 C 库。

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

于 2013-10-22T11:59:59.707 回答
1

Take a look at these two links below for parsing from Json file in iOS:

http://www.appcoda.com/fetch-parse-json-ios-programming-tutorial/

http://www.raywenderlich.com/5492/

于 2013-10-22T11:35:39.917 回答
1

要首先从JSON文件中搜索,您需要对其进行解析。

请按照以下步骤操作:

NSData *theData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"fileName"ofType:@"json"]];
NSDictionary *myJSONData = [NSJSONSerialization JSONObjectWithData:theData options:NSJSONReadingMutableContainers error:nil];

一旦你得到NSDictionary然后你可以用NSPredicate它来搜索它。

希望对你有帮助

于 2013-10-22T11:32:43.833 回答
0

假设您在本地存储广告数据,那么另一个选择是使用 SimpleDB,这是我编写的键/值数据存储。使用它,您可以存储 JSON 值,然后返回符合您要求的键。(https://github.com/AaronBratcher/SimpleDB

[SimpleDB setValue:adJSONValue forKey:myKey inTable: kAdsTable];

您的 passTest 代码块一次只能解析一项,因此内存不会成为问题,这似乎是您最关心的问题。

您的代码将如下所示:

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.
于 2013-10-22T12:00:34.220 回答