解析FQL结果

时间:2014-04-12 19:10:46

标签: ios objective-c parsing facebook-fql

我使用FQL来获取最近的5个地方的名称,如下所示:

- (void)facebookPlaces {

    NSString *query = @"SELECT name FROM place WHERE distance(latitude, longitude, \"39.750655\", \"-104.999127\") < 500 ORDER BY distance(latitude, longitude, \"23.750655\", \"-180.999127\") limit 5";

    // Set up the query parameter
    NSDictionary *queryParam = @{ @"q": query };
    // Make the API request that uses FQL
    [FBRequestConnection startWithGraphPath:@"/fql"
                                 parameters:queryParam
                                 HTTPMethod:@"GET"
                          completionHandler:^(FBRequestConnection *connection,
                                              id result,
                                              NSError *error) {
                              if (error) {
                                  NSLog(@"Error: %@", [error localizedDescription]);
                              } else {
                                  NSLog(@"Result: %@", result);
                                  // Store the result in an NSData object
                                  NSData *nameData = [result data];
                                  NSLog(@"Test data reads: %@", nameData);

                              }
                          }];

结果整齐地返回:

Result: {
    data =     (
                {
            name = "T|aco";
        },
                {
            name = "ChoLon Bistro";
        },
                {
            name = "Illegal Pete's Lodo";
        }, etc...

我将数据存储在NSData对象中,它的读取方式完全相同。我想以一种方式解析结果,我可以用一种简单的方式获取所有名称,并将它们打印到日志中。我能想到的唯一方法是手动解析NSData或结果,但我不知道如何只使用name =旁边的引号中的内容。我对FQL和objective-c都很陌生,有谁知道我该怎么做?

当我研究这个时,我看到了一个很棒的JSON示例,它将name =旁边的所有内容都存储在一个数组中。虽然它适用于Android,但我无法弄清楚如何让它在iOS中运行。理想情况下,这就是我想要做的事情。

1 个答案:

答案 0 :(得分:1)

结果被解析为NSDictionary的JSON对象。您可以告诉,因为结果对象以{}开头。在data键内,您会看到一个数组(用()表示)。

所以要获得一系列名称,你可以这样做:

NSMutableArray *names = [NSMutableArray array];
for (NSDictionary *item in result[@"data"]) {
    [names addObject:item[@"name"]];
}

这就是你要追求的吗?