2011-10-21 1 views
0

iOS 앱에서 JSON 문자열을 구문 분석하는 방법은 무엇입니까? SBJSON 사용. 아래 코드를 실행합니다. 데이터를 얻는 것은 성공적이지만 JSON 문자열에 항목이 들어 있어도 배열의 항목 수는 0입니다. 내 질문에 루프에서 JSON 문자열을 쿼리하는 방법은 무엇입니까?iOS : JSON String to NSArray가 예상대로 작동하지 않습니다.

감사합니다.

// Create new SBJSON parser object 
SBJsonParser *parser = [[SBJsonParser alloc] init]; 

// Prepare URL request to download statuses from Twitter 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://safe2pee.org/api/proxlist.php?location=37.7626214,-122.4351661&distance=1"]]; 

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

// Get JSON as a NSString from NSData response 
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 

NSLog(@"string equal = %@", json_string); 

// parse the JSON response into an object 
// Here we're using NSArray since we're parsing an array of JSON b objects 
NSArray *bathrooms = [parser objectWithString:json_string error:nil]; 

NSLog(@"count = %d", [bathrooms count]); 

// Each element in bathrooms is a single bathroom 
// represented as a NSDictionary 
for (NSDictionary *bathroom in bathrooms) 
{ 
    // You can retrieve individual values using objectForKey on the bathroom NSDictionary 
    // This will print the tweet and username to the console 
    NSLog(@"%@ - %@", [bathroom objectForKey:@"name"], [[bathroom objectForKey:@"lat"] objectForKey:@"long"]); 
} 
+0

'[json_string JSONValue]'를 시도해보십시오. –

답변

2

효과가 없기 때문입니다. 유효한 JSON 문자열이 아닙니다. 두 개의 JSON 사전이 있는데, 그 사이에 쉼표가 붙어 있습니다. 줄 바꿈이 누락되었습니다. []. 실제로 -objectWithString:error:의 결과 값을 테스트하는 경우 결과 값이 0으로 표시되고 NSError**error 매개 변수로 전달하면 잘못된 JSON임을 알리는 오류 메시지가 표시됩니다.

+0

죄송합니다. 전 json 문자열 전체를 게시하지 않았 음을 분명히해야합니다. 나는 그것을 편집하려고합니다. 전체 문자열이 다소 큽니다. – user1003426

+0

내 요점은 남아 있습니다. 그것은 당신이'nil'을 되 찾을 가능성이 높습니다. 에러 변수를 전달하고,'-objectWithString : error :'의 결과를 테스트하고,'nil'의 결과를 출력해야합니다. –

+0

이것은 다시 오는 오류입니다 .... 2011-10-20 17 : 35 : 22.868 JSOHHelp [8887 : f803] 오류는 Error Domain = org.brautaset.SBJsonParser.ErrorDomain Code = 0 "예상치 못한 입력 끝"입니다. UserInfo = 0x68831d0 {NSLocalizedDescription = 예기치 않은 입력의 끝} – user1003426

0

게시물의 URL을 요청할 때 반환 된 JSON 문자열을보고 서버에서 잘못 잘라내는 것처럼 보입니다. 반환 된 JSON 문자열에는 값이 배열 사전 구조의 배열 인 "bathrooms"라는 키가 포함 된 사전 구조가 포함되어 있습니다. 각 욕실 사전 구조에는 "bid", "name", "lat", ..., "directions"및 "comment"등 여러 필드가 있습니다.

수신 한 JSON의 끝으로 스크롤하면 "욕실"배열 ("bid"는 "MTIyIFMyUA ==", "name"은 "Momi Tobi 's") 아래에 완전한 사전 구조가 나타납니다. 구조에 닫는 중괄호가 있지만 배열의 닫는 "]"이없고 최상위 사전 구조의 닫기 "}"가 누락되었습니다.

잘못된 JSON이 반환되는 이유를 확인하려면 서비스를 찾아야합니다 문자열을 가져 오면 NSDictionary로 시작하여 다음과 같이 구문 분석해야하는 것처럼 보입니다.

NSDictionary *result = [parser objectWithString:json_string error:nil]; 
NSArray *bathrooms = [result objectForKey:@"bathrooms"]; 
관련 문제