2014-04-12 2 views
0

FQL 결과를 구문 분석 : 나는 데이터를 저장난과 같이 가장 가까운 5 곳의 이름을 얻을 수 FQL을 사용하고

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

:

- (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); 

           } 
          }]; 

이 결과는 깔끔하게과 같이 반환 NSData 객체에 저장하면 정확히 동일한 방법으로 읽습니다. 결과를 구문 분석하여 모든 이름을 간단한 방식으로 가져 와서 로그에 인쇄 할 수 있습니다. 내가 생각할 수있는 유일한 방법은 수동으로 NSData 나 결과를 파싱하는 것이었지만, name = 옆의 따옴표로만이 항목을 가져 오는 방법을 모릅니다. 나는 FQL과 objective-c에 대해 매우 익숙하다. 나는 이것을 어떻게 할 수 있는지 누구나 알고 있는가?

이 기사를 살펴보면 name = 옆에있는 모든 것을 가져 와서 배열에 저장 한 멋진 JSON 예제를 보았습니다. 그것은 안드로이드를위한 것이지만 나는 그것이 IOS에서 작동하게하는 방법을 알아낼 수 없었다. 이상적으로 내가하려는 일입니다.

답변

1

결과가 NSDictionary으로 JSON 객체로 구문 분석되고 있습니다. 결과 개체가 {}으로 시작하기 때문에 알 수 있습니다. data 키 안에는 배열 (()으로 표시)이 있습니다.

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

이 필요하시면 :

그래서 당신이 할 수있는 이름의 배열을 얻으려면?

+0

그게 전부 야! Ben 정말 고마워. – John