【问题标题】:Getting data from API, need to filter results从 API 获取数据,需要过滤结果
【发布时间】:2013-04-10 21:33:24
【问题描述】:

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

我想获取咖啡店的列表,并且可以正确获取该列表(我正在使用 RestKit)...但是一旦获得该列表,我最终需要过滤掉所有属于“星巴克”。

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

任何想法我怎么能做到这一点?如果您需要我发布的任何可能有帮助的代码 sn-ps,请告诉我。谢谢!

编辑

来自 API 的正常响应类型是:

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

所以我需要使用“名称”并过滤掉任何名称为"Starbucks"

【问题讨论】:

  • 从API获取响应时能否显示代码?
  • 响应是什么样的?
  • 我无法发布整个响应,因为代码太多,但这是通过 Foursquare 指向典型 JSON 响应的链接:developer.foursquare.com/overview/realtime
  • @JulianOsorio 更新了一个编辑,这就是你要找的吗?
  • @ChrisWagner 更新了一个编辑,这也是你想要的吗?

标签: ios objective-c api restkit foursquare


【解决方案1】:

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

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

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

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

【讨论】:

  • 听起来不错,我从未使用过内置的 JSON 解析器,所以感谢您的提醒!我会试一试,看看我能不能让它工作。谢谢!
【解决方案2】:

如果 FourSquare 不允许您对请求应用过滤器,以过滤名称“Starbucks”,那么我将对此执行以下操作。

我首先将响应反序列化为 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");

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

【讨论】:

  • 是的,遗憾的是 Foursquare 不允许我应用过滤器请求,但是您对如何过滤器的回答对我来说很有意义,所以我会尝试一下。这只是在 viewDidLoad 中吗?
  • 几乎可以去任何地方,我想你会希望它在你的网络服务调用回来时运行。
  • 酷,有道理。非常感谢克里斯!
  • 不客气。如果这回答了您的问题,您应该接受关闭问题的答案。
  • 问题,既然我说我正在使用RestKit,我需要使用RKNSJSONSerialization还是只使用NSJSONSerialization?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
相关资源
最近更新 更多