2011-11-05 21 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) 

如何我應該解析這個嗎?

編輯: 我嘗試了建議的技術,這給了我一個數組

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

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

日誌輸出的形式爲:

{ 
       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 

這又不是JSON和難以解析,我如何在json中獲得輸出。

回答

1

如果輸出低於NSLog(@"%@", results);是您的日誌語句。它看起來你的結果變量是一個字典對象的數組。

嘗試登錄類的結果來驗證NSLog(@"%@", [results class]);

如果它是一個數組的羣體對象是第二個對象。

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

堅持做下去,直到你明白你的數據

還行

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

應該引起關注的格式。查看foursquare上的文檔以獲取當前獲取組的方式。

+0

我會試試這個並回傳結果。 – nikhil

3

我是iPhone在foursquare的主角。我會嘗試刺殺這裏發生的事情。

首先,我強烈建議您爲解析器使用JSONKit。它的重量很輕,速度非常快:https://github.com/johnezang/JSONKit

看起來您正在正確解析JSON並正確獲取字典。然後記錄解析的對象,而不是原始的JSON。您看到的輸出是Objective-C如何選擇將解析的字典序列化爲文本。這絕對不是JSON。使用JSONKit,您可以將JSONString選擇器發送到您的解析結果並將其轉換回JSON並記錄下來。

如果您可以提供一些關於您嘗試解決的問題的詳細信息,我可能會幫助您解決更多問題。正如Maudicus所說的,請注意你回來的錯誤。當我們對API進行更改時,您不希望您的應用程序中斷。

+0

好吧,我會看看JSONKit,我基本上試圖獲得foursquare API爲我的應用程序返回的附近地方的列表。 – 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

相關問題