从API获取数据需要过滤结果

时间:2013-04-17 22:51:13

标签: ios objective-c api restkit foursquare

我正在处理来自Foursquare API的数据。

我想得到一个咖啡店列表,我正确地回来了(我正在使用RestKit)......但是一旦我得到那个列表,我最终需要过滤掉任何咖啡店。 “星巴克”。

所以现在我只知道如何吸引所有的咖啡店,但是在我将它提供到应用程序表视图之前我不知道如何解析数据,这样就不会有星巴克咖啡店了列出。

我有什么想法可以做到这一点?如果您需要我发布的任何可能有用的代码段,请告诉我们。谢谢!

修改

API的正常响应类型为:

"venue": [{
    "name": "ABC Coffee Shop", {

所以我需要输入“name”并过滤掉"Starbucks"的任何名称。

2 个答案:

答案 0 :(得分:3)

如果FourSquare不允许您对请求应用过滤器,要过滤名称“星巴克”,那么我将对此做些如下。

我首先将响应反序列化为JSON对象,在这种情况下将是一个字典。

NSError *error = nil;
NSDictionary *responseDict = [[NSJSONSerialization JSONObjectWithData:foursquareResponse options:0 error: &error];
NSArray *starbucks = nil;
if (!error) {
    NSArray *coffeeShops = responseDict[@"venue"];
    starbucks = [coffeeShops filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"name = 'Starbucks'"]];
} else {
    // handle the error
}

NSLog(@"Starbucks: %@", starbucks");

我没有测试这段代码,但我认为它应该让你顺利。

答案 1 :(得分:1)

对我来说看起来像JSON,你可以使用内置的JSON解析器NSJSONSerialization类。这是我构建的一个方法,它采用NSData JSON参数,反序列化它并返回一个字典。

- (NSMutableDictionary *)deserialize: (NSData *)data {

    return [[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error: nil] mutableCopy];
}

我不知道Foursquare内部响应的结构,所以你可能想要NSLog()返回的字典,看看你现在如何引用它。