2011-11-05 1 views
4

foursquare api를 사용하여 주변 장소를 얻으려고합니다. 여기iPhone에 대해 foursquare가 반환 한 json을 구문 분석 할 때 인식 할 수없는 선행 문자가 나타납니다.

NSDictionary *results = [jsonString JSONValue]; 
NSLog(@"%@", results); 
(
     { 
     code = 200; 
     errorDetail = "This endpoint will stop returning groups in the future. Please use a current version, see http://bit.ly/lZx3NU."; 
     errorType = deprecated; 
    }, 
     { 
     groups =   (
         { 
       items =     (
             { 
         categories =       (
                 { 
           icon = "https://foursquare.com/img/categories/parks_outdoors/default.png"; 
           id = 4bf58dd8d48988d163941735; 
           name = Park; 
           parents =         (
            "Great Outdoors" 
           ); 
           pluralName = Parks; 
           primary = 1; 
           shortName = Park; 
          } 
         ); 

에서 반환 된 JSON 데이터가 그럼 난

NSArray *groups = [ (NSDictionary *)results objectForKey:@"groups"]; 

이 다음과 같은 오류를 반환과 배열 그룹의 목록을 얻으려고입니다

2011-11-05 11:42:12.907 XperienzApp[1972:207] No of results returned: 0 Results : (null) 
2011-11-05 11:42:13.225 XperienzApp[1972:207] -JSONValue failed. Error trace is: (
    "Error Domain=org.brautaset.JSON.ErrorDomain Code=3 \"Unrecognised leading character\" UserInfo=0x5849cd0 {NSLocalizedDescription=Unrecognised leading character}" 
) 
2011-11-05 11:42:13.225 XperienzApp[1972:207] No of results returned: 0 Results : (null) 

방법 내가 이것을 파싱해야 하나?

편집 :이 다시하지 JSON과 구문 분석하기 어렵다

{ 
       categories =     (
             { 
         icon = "https://foursquare.com/img/categories/nightlife/danceparty.png"; 
         id = 4bf58dd8d48988d11f941735; 
         name = Nightclub; 
         parents =       (
          "Nightlife Spots" 
         ); 
         pluralName = Nightclubs; 
         primary = 1; 
         shortName = Nightclub; 
        } 
       ); 
       contact =     { 
       }; 
       hereNow =     { 
        count = 0; 
       }; 
       id = 4eb33ba561af0dda8f673c1b; 
       location =     { 
        address = "144 Willow St 4R"; 
        city = Brooklyn; 
        crossStreet = Pierrepont; 
        distance = 462; 
        lat = "40.696864"; 
        lng = "-73.996409"; 
        postalCode = 11201; 
        state = NY; 
       }; 
       name = "Entertainment 720, Ltd."; 
       stats =     { 
        checkinsCount = 3; 
        tipCount = 0; 
        usersCount = 1; 
       }; 
       verified = 0; 
      } 
     ); 
     name = Nearby; 
     type = nearby; 
    } 
) 
groups __NSArrayM 1 

: 내가 제안 된 기법을 시도,이 날

id groups = [[(NSDictionary *)results objectForKey:@"response"] objectForKey:@"groups"]; 

    if ([results count] > 1){ 
     NSLog(@"groups class %@\ngroups %@ %d", groups, [groups class], [groups count]); 

로그 출력의 형식 인 배열을 제공합니다 , json에서 출력을 얻으려면 어떻게해야합니까?

답변

1

출력이 NSLog(@"%@", results); 이하인 경우 로그 문입니다. 결과 변수가 사전 객체의 배열 인 것으로 나타납니다.

봅니다 결과의 클래스가 NSLog(@"%@", [results class]);

그것은 당신의 그룹이 객체 배열 인 경우 두 번째 객체인지 확인하기 위해 로그인합니다. 당신이 당신의 데이터

errorDetail = "This endpoint will stop returning groups in the future. Please use a current version, see http://bit.ly/lZx3NU."; 

우려에 대한 원인이 될한다 또한 라인의 형식을 이해할 때까지이 일을

if ([results count] > 1) 
id groups = [results objectAtIndex:1]; 
NSLog(@"groups class %@\ngroups %@", [groups class], groups); 

하십시오. 그룹을 얻는 현재 방법에 대해 foursquare의 문서를 확인하십시오.

+0

나는 이것을 시험해보고 결과를 게시 할 것이다. – nikhil

3

나는 foursquare의 iPhone 선두입니다. 나는 여기에 무슨 일이 일어나고 있는지 찔러 보려고 노력할 것이다.

우선 JSONKit을 파서로 사용하는 것이 좋습니다. 가볍고 미친 듯이 빠릅니다. https://github.com/johnezang/JSONKit

JSON을 올바르게 구문 분석하고 사전을 제대로 읽는 것으로 보입니다. 그런 다음 원본 JSON이 아닌 구문 분석 된 객체를 로깅합니다. 출력 결과는 Objective-C가 구문 분석 된 사전을 텍스트로 직렬화하는 방법을 선택하는 것입니다. 확실히 JSON이 아닙니다. JSONKit을 사용하여 JSONString 선택기를 파싱 된 결과에 보내고 다시 JSON으로 변환하고이를 기록 할 수 있습니다.

해결하려는 문제에 대한 세부 정보를 제공 할 수 있다면 더 많은 도움을 드릴 수 있습니다. 그리고 Maudicus가 말했듯이, 당신이 돌아 오는 오류에주의를 기울여주십시오. API를 변경하면 앱이 중단되는 것을 원하지 않습니다.

+0

좋아요, JSONKit을 살펴 보겠습니다. 기본적으로 내 앱에 대해 정사각형으로 표시되는 인근의 목록을 얻으려고합니다. – nikhil

+0

지금 JSONKit을 사용하고 있지만 json의 구조가 반환되는 것을 알아 내기가 어렵습니다. NSDictionary * json_obj = [jsonString objectFromJSONString]; NSArray * results = [json_obj objectForKey : @ "places"]; 이 json에서 장소 이름을 어떻게 얻을 수 있습니까? – nikhil

+0

anoopr처럼 v = param을 사용해야 현재 장소 API를 얻을 수 있습니다. 일단 JSONKit으로 전달하면 다음을 사용하여 장소 배열을 가져올 수 있습니다. NSArray * venuesData = [[json_obj objectForKey : @ "response"] objectForKey : @ "venues"]; – adamweeks

관련 문제