2013-11-26 4 views
0

여기 볼 수있는 스크립트에 의해 생성 된 JSON 파일이 currentley 데이터를 잡아하는 방법을 지정하려면/구문 분석 JSON 도움말 IOS

-(void)makeStopRequests{ 
NSURL *url = [NSURL URLWithString:@"http://ddelay.co.uk/bus/output.json"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

//AFNetworking Asynchronous Task 
AFJSONRequestOperation *operation = [AFJSONRequestOperation 
            JSONRequestOperationWithRequest:request 
            success:^(NSURLRequest *request, NSHTTPURLResponse *response, id responseObject) 
            { 
             NSLog(@"JSON RESULT %@", responseObject); 
             self.stopArray = [responseObject objectForKey:@"stop_name"]; 
             [self.tableView reloadData]; 

            } 
            failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id responseObject) 
            { 
             NSLog(@"Request Failed: %@, %@", error, error.userInfo); 
            }]; 
[operation start]; 

} 

나는 누군가가 내가 데이터를 선택 얼마나 나를 통해 안내 할 수 있기를 바랍니다,

감사합니다. Damien

+0

코드가 올바르게 보입니다. NSLog 문의 결과는 무엇입니까? 작동하지 않는 것은 무엇입니까? –

+0

NSLog http://ddelay.co.uk/bus/output.json에서 JSON이 모두 올바르게 표시됩니다. 이제 어떻게해야 할 지 알아야합니다. 예를 들어 stop_name 또는 stop_number와 같은 데이터에 액세스하는 것입니다. objectForKey 메서드를 사용하면 아무 것도 반환하지 않습니다. –

+0

더 많은 설명이 필요하면 편집 된 답변보기. –

답변

0

AFNetworking을 사용하고 있으며 응답 개체를 제공합니다. 그것은 이미 Objective 개체로 형 변환되고 있습니다. 당신은 단순히 URL을이 형식으로 JSON을 반환이

NSArray *array = (NSArray*)responseObject;//if your json returns an array 
NSDictionay *dict (NSDictionary*)responseObject;//if json returns dictionary. 

같이있는 NSArray 나 NSDictionary에에 할당 할 수 있습니다;

[ { 
     "service":"22", 
     "provider":"First in Yorkshire", 
     "dest":"Nether Edge to Woodhouse", 
     "dest URL":"/web/public_service_stops.asp?service=22&operatorid=31&systemid=30&goingto=Woodhouse" 
    }, 
    { 
     "service":"22", 
     "provider":"First in Yorkshire", 
     "dest":"Barnsley to Rotherham", 
     "dest URL":"/web/public_service_stops.asp?service=22&operatorid=31&systemid=30&goingto=Rotherham" 
    } 
] 

실제로는 사전의 배열이므로 데이터를 액세스하려면 이처럼 반복해야합니다.

NSArray *jsonResponse = (NSArray*)responseObject; 
for (NSDictionary *dic in jsonResponse){ 
NSString *service = [dic valueForKey:@"service"]; 
NSString *provider = [dic valueForKey:@"provider"]; 
//Same for others 
//It will better you create calss with these properties and then add that object to an Array, and on reloading data in table get that object from array in cellForRowAtIndexPath and use requried property to populate your data. 
//Or if you just want to use stop name add stop name to array and use it. 
NSString *stopName =[dic valueForKey:@"stop_name"]; 
//[dataArray addObject:stopName]; in case you want to use only stop name 

} 
+0

이것은 AFNetworking을 사용하는 방법이 아닙니다. –

+0

자, 이제 NSJSONSerialization을 제거하기위한 답을 편집했지만 OP가 이미 게시 한 코드와 동일한 코드를 보여줍니다. –

+0

이게 우리가하는 방식이기 때문에, AFnetworking이 당신에게 객체를 돌려주었습니다. id responseObject는 objective-c 객체이며 json 출력에 따라 사전 또는 배열이됩니다. 그리고 우리는 키 값 쌍을 얻는 방법을 말할 수 있습니다 ... –

1

난 그냥 (이전하고,하지만 너무 확실하지 않은 수 있음)에서 iOS 5 이후 아이폰 OS에 내장되어 NSJSONSerialization, 같은 간단한을 사용하는 것이 좋습니다 것입니다.

그냥뿐만 아니라 다음

NSURLRequest *someRequest = [[NSURLRequest alloc] initWithURL:someURL cachePolicy:NSURLRequestReloadRevalidatingCacheData timeoutInterval:10.0]; 
NSURLConnection *someConnection= [[NSURLConnection alloc] initWithRequest:someRequest delegate:self]; 

과 구조를 네트워크에 내장 된 표준을 사용하여 데이터를 얻을 요청에서 데이터를 얻을 다음 코드

NSDictionary *dict= [NSJSONSerialization JSONObjectWithData:webData options:NSJSONReadingMutableLeaves error:nil]; 

와 사전에 그 구문 분석 적절한 위임 및 데이터 처리를 수행하십시오. 자세한 내용

다음
+0

시도했습니다. sugested 코드를 사용하지만 getObjectForKey @ "stop_name"을 사용하려고하면 인스턴스에 보낸 인식 할 수없는 선택자를 반환합니다. 제발 도와 줄 수 있니? –

+0

AFNetworking은 완료 블록 전에 이미 NSJSONSerialization을 호출합니다. –

+0

당신은 반환 된 사전을'NSLog' 할 수 있어야하고, 채워지는 것을 확인하기 위해 그 안에 무엇이 있는지 알아야합니다. – MZimmerman6

0

을 얻을 수있는 설명서를 참조하는 것은 최소한의 코드입니다 : 당신은 아마 당신을 통해 구문 분석하지 않아도, 자신의 데이터 클래스를 만들고 싶어합니다 이것보다 더 복잡 아무것도 들어

self.stopArray = responseObject; 
for (NSDictionary *stopDict in self.stopArray) { 
    NSString *service = [stopDict objectForKey:@"service"]; 
    NSString *provider = [stopDict objectForKey:@"provider"]; 
    NSString *dest = [stopDict objectForKey:@"dest"]; 
    NSString *destURL = [stopDict objectForKey:@"dest URL"]; 
    // do something with this data 
} 

사전 및 테이블보기 대리인 메서드의 배열.