2011-10-17 100 views
-1

可能重複:
How to parse JSON in Objective-C?Objective - C:如何閱讀json?

我目標C完全新的,我需要從谷歌距離矩陣JSON距離的值,但數據我可以從JSON只是第一個獲得元素, 所以如何獲得距離這個json的價值?

{ 
"destination_addresses": [ 
    "San Francisco, Californie, États-Unis", 
    "Victoria, BC, Canada" 
], 
"origin_addresses": [ 
    "Vancouver, BC, Canada", 
    "Seattle, État de Washington, États-Unis" 
], 
"rows": [ 
    { 
     "elements": [ 
      { 
       "distance": { 
        "text": "1 732 km", 
        "value": 1732128 
       }, 
       "duration": { 
        "text": "3 jours 23 heures", 
        "value": 340902 
       }, 
       "status": "OK" 
      } 
     ] 
    } 
], 
"status": "OK" 
} 

確定這裏是我的示例代碼,剛剛從JSON教程如下:

我已經使用SBJSON,但我只能行關鍵,所以如何讓距離

SBJSON *parser = [[SBJSON alloc] init]; 


NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL 

URLWithString:@"http://maps.googleapis.com/maps/api/distancematrix/json?origins=Vancouver+BC|Seattle&destinations=San+Francisco|Victoria+BC&mode=bicycling&language=fr-FR&sensor=false"]]; 

// Perform request and get JSON back as a NSData object 
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 


NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 

NSArray *statuses = [parser objectWithString:json_string error:nil]; 

for (NSDictionary *status in statuses) 
{ 

    NSLog(@"%@ - %@", [status objectForKey:@"rows"]); 
} 
+0

你到目前爲止嘗試過哪些代碼? –

+0

請再檢查一次!我發佈了一些示例代碼! – user999218

回答

0

您需要使用JSON解析器,如SBJSON。這將創建一個包含所有值和鍵的NSDictionary/NSArray。然後使用正常的字典和數組方法來訪問數據。

1

如果你的目標是iOS 5或OS X v10.7,那麼你可以使用蘋果自己的NSJSONSerialization。你可能特別想要+JSONObjectWithData:options:error:。使用內置的東西總是比第三方的選擇更可取,因爲它消除了第三方沒有直接的利益來修復它的錯誤,也沒有辦法在沒有您的干預的情況下爲您的應用程序提供修復。

如果你想支持較舊的設備,那麼你可能想要導入SBJSON--就像Rengers所說的那樣 - 或者其他任何一個。由於上述原因,我強烈建議你只有在NSJSONSerialization不可用的情況下才會回退。

編輯:它看起來你已經有SBJSON的地方,並詢問如何遍歷結果?通過閱讀JSON:

  • 根對象將是一個字典
  • 內它,行將是字典的陣列
  • 每個字典具有陣列命名的元素
  • 該陣列中的每個條目是字典
  • 內的,距離爲另一字典
  • 距離包含兩個串,與鍵「文本」和「值」

所以,如果你沒有做任何驗證可言,才能到距離詞典中,你可以做:

NSDictionary *result = [parser objectWithString:...]; 

NSLog(@"distance dictionary is: %@" 
    [[[[[ 
     result objectForKey:@"rows"] 
     objectAtIndex:0] 
      objectForKey:@"elements"] 
      objectAtIndex:0] 
       objectForKey:@"distance"] 
); 

根據您的示例代碼,它看起來像你實際上可能會得到的數組直接發佈各種字典而不是字典。如果是這樣的話,顯然會適應。

+0

請再檢查一次!我發佈了一些示例代碼! – user999218