2013-08-29 7 views
0

Jason URl로부터 의사의 데이터를 받고 있습니다. 이 데이터는 일부 의사의 경우 단일 의사 위치를 표시하고 일부 의사의 경우 여러 위치를 표시합니다. 그 데이터를 어떻게 표시 할 수 있습니까? 한 번 plaese는 나에게 그 데이터가 아래에 보여주고있는 해결책을 준다.ison에서 Json 데이터 가져 오기

"id":"135","speciality":"Allergy","type":"P", 
    "doc_name":"Patrick M. Ambrosio, D.O., F.A.C.A.A.I.", 
    "doc_profile_url":"Patrick-M-Ambrosio", "doc_offices":[ 
      { 
       "office_id":17, 
       "office_name":"Old Bridge", 
       "office_url":"Old-Bridge", 
       "state":"New Jersey", 
       "state_short":"NJ", 
       "city":"Old-Bridge", 
       "lat":"40.3975", 
       "lon":"-74.3298", 
       "office_combined_name":"Old Bridge,New Jersey,NJ" 
      }, 
      { 
       "office_id":7, 
       "office_name":"Woodbridge", 
       "office_url":"Woodbridge", 
       "state":"New Jersey", 
       "state_short":"NJ", 
       "city":"Iselin", 
       "lat":"40.555", 
       "lon":"-74.3151", 
       "office_combined_name":"Woodbridge,New Jersey,NJ" 
      } ] 
      }, { 
      "id":"2", "speciality":"Allergy", "type":"P", "doc_name":"Ricardo Arayata, M.D., F.A.C.A.A.I.", 
    "doc_profile_url":"ricardo-arayata-md", "doc_offices":[ 
      { 
       "office_id":22, 
       "office_name":"Purchase", 
       "office_url":"Purchase", 
       "state":"New York", 
       "state_short":"NY", 
       "city":"Purchase", 
       "lat":"41.0099", 
       "lon":"-73.6959", 
       "office_combined_name":"Purchase,New York,NY" 
      }, 
      { 
       "office_id":15, 
       "office_name":"New Rochelle", 
       "office_url":"New-Rochelle", 
       "state":"New York", 
       "state_short":"NY", 
       "city":"New-Rochelle", 
       "lat":"40.9158", 
       "lon":"-73.7864", 
       "office_combined_name":"New Rochelle,New York,NY" 
      } ] 
      }, { 
      "id":"3", "speciality":"ENT", "type":"P", "doc_name":"Anna Aronzon, M.D.", 
    "doc_profile_url":"anna-aronzon-md", "doc_offices":[ 
      { 
       "office_id":27, 
       "office_name":"Wall Street", 
       "office_url":"Wall-Street", 
       "state":"New York", 
       "state_short":"NY", 
       "city":"New-York", 
       "lat":"40.7096", 
       "lon":"-74.0104", 
       "office_combined_name":"Wall Street,New York,NY" 
      } ] 
      }, { 
      "id":"4", "speciality":"ENT", "type":"P", "doc_name":"Jonathan Aviv, M.D., F.A.C.S.", 
    "doc_profile_url":"jonathan-aviv-md", "doc_offices":[ 
      { 
       "office_id":23, 
       "office_name":"Sleepy Hollow", 
       "office_url":"Sleepy-Hollow", 
       "state":"New York", 
       "state_short":"NY", 
       "city":"Sleepy-Hollow", 
       "lat":"41.0802", 
       "lon":"-73.8572", 
       "office_combined_name":"Sleepy Hollow,New York,NY" 
      }, 
      { 
       "office_id":6, 
       "office_name":"East Side", 
       "office_url":"East-Side", 
       "state":"New York", 
       "state_short":"NY", 
       "city":"New-York", 
       "lat":"40.7768", 
       "lon":"-73.9541", 
       "office_combined_name":"East Side,New York,NY" 
      } ] 
      }, { 
      "id":"163", "speciality":"ENT", "type":"P", "doc_name":"Andrew Azer, M.D.", 
    "doc_profile_url":"andrew-azer-md", "doc_offices":[ 
      { 
       "office_id":17, 
       "office_name":"Old Bridge", 
       "office_url":"Old-Bridge", 
       "state":"New Jersey", 
       "state_short":"NJ", 
       "city":"Old-Bridge", 
       "lat":"40.3975", 
       "lon":"-74.3298", 
       "office_combined_name":"Old Bridge,New Jersey,NJ" 
      }, 
      { 
       "office_id":7, 
       "office_name":"Woodbridge", 
       "office_url":"Woodbridge", 
       "state":"New Jersey", 
       "state_short":"NJ", 
       "city":"Iselin", 
       "lat":"40.555", 
       "lon":"-74.3151", 
       "office_combined_name":"Woodbridge,New Jersey,NJ" 
      } ] 

나는 또한 한 번 plaese 그것을 밖으로 체크 아웃하고있다.

- offC = [[[rr objectForKey:@"doc_offices"] 
      objectAtIndex:0]objectForKey:@"office_name"]; 
NSString *docOfficeID 
      = [[[rr objectForKey:@"doc_offices"]objectAtIndex:0]objectForKey:@"office_id"]; 
+1

은? 배열에 json을 저장했는지 아닌지? –

+1

예 배열에 데이터를 저장했습니다. 하지만 조건을 검사하기 위해 루프를 작성하고 싶습니다. –

답변

0

왜 모든 사용자가 제 3 자 프레임 워크를 제안합니까? iOS에는 기본 JSON 직렬화 도구가 있습니다 (NSJSONSerialization). 이것은 매우 사용하기 쉽습니다. 예 :

dispatch_queue_t fetchQueue = dispatch_queue_create("nameOfYourQ", NULL); //here i create dispatch for connection (do not block UI!) 
dispatch_async(fetchQueue, ^{ // block to fetch and parse 
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://yourlink"]]; // NSData - connection for JSON 
    id arrayOrDictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; // parse NSData object to Dictionaries and Arrays. 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [yourTableView reloadData]; // reload your view on main thread. 
    }); 
}); 

이것은 매우 간단한 예입니다. 내가 뭘하고 싶은데요 데이터를 다운로드에 대한 NSURLConnectionDelegate을 사용하고 다음 대리인 메서드를 구문 분석 데이터에 NSJSONSerialization을 사용합니다.

대기, JSON 구조에개 이상의 키가 있습니다. 그래서 나는 당신이 정말로 가지고 있다고 생각한다 (office_id) 배열 - 사전 - 사전 - 배열.

그래서 :

NSNumber *docOfficeID = [[[[rr objectAtIndex:0] objectForKey:@"doc_offices"] objectAtIndex:0] objectForKey:@"office_id"]; 

그리고 이것은 NSString 없습니다. 이 여기 NSNumber

2

내 솔루션입니다 : 유지고 어떤 오류

 NSError *jsonParsingError = nil; 
     NSMutableArray *arrDoctorInfo = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&jsonParsingError]; 
     for (NSMutableDictionary *data in arrDoctorInfo) { 

      NSMutableArray *arrOffice = [data valueForKey:@"doc_offices"]; 
      NSString *strID = [data valueForKey:@"ID"]; 
      . 
      . 
      NSString *strdoc_profile_url = [data valueForKey:@"doc_profile_url"]; 
      for (NSMutableDictionary *dictDoffice in arrOffice) { 
       NSString *strdictDoffice = [dictDoffice valueForKey:@"office_id"]; 
       . 
       . 
       NSString *stroffice_combined_name = [dictDoffice valueForKey:@"office_combined_name"]; 
      } 

     }