2012-11-21 2 views
3

사용자 시간대를 얻기 위해 Twitter API에서받은 JSON 문자열을 구문 분석하려고합니다. Jastor를 사용하여 JSON 응답을 객관적인 C 객체로 변환합니다. 나는 때문에 "(" ")"의 존재에 JSON이 Jastor 그것의 모든하지만,이 블록을 구문 분석 할 것 표준없는 경우에도 기관에게 객체ios Twitter API JSON 구문 분석

entities = { 
     hashtags =(); 
     media = (
       { 
       "display_url" = "pic.twitter.com/..."; 
       "expanded_url" = "http://..."; 
       id = ...; 
       "id_str" = ...; 
       indices =(
        5, 
        25 
       ); 
       "media_url" = "http://..."; 
       "media_url_https" = "https://..."; 
       sizes ={ 
        large ={ 
         h = 765; 
         resize = fit; 
         w = 1024; 
        }; 
        medium ={ 
         h = 448; 
         resize = fit; 
         w = 600; 
        }; 
        small ={ 
         h = 254; 
         resize = fit; 
         w = 340; 
        }; 
        thumb ={ 
         h = 150; 
         resize = crop; 
         w = 150; 
        }; 
       }; 
       type = photo; 
       url = "http://..."; 
      } 
     ); 
     urls =(); 
     "user_mentions" =(); 
    }; 

을 구문 분석하려고 할 때까지 모든 것이 잘 작동합니다. Jastor가이 블록을 구문 분석하도록 허용하는 방법을 알고 있습니까? 아니면 도서관을 바꿔야합니까?

감사합니다.

+0

JSON 청크 전체를 게시 할 수 있습니까? – ale0xB

답변

8

질문에 대한 궁금증은 JSON 형식의 문자열이 아니라는 것입니다. 이것은 NSDictionaryNSArray 개체의 중첩 된 조합으로 JSON 문자열을 Objective-C 개체로 변환 할 때 일반적입니다. NSLog 이러한 종류의 개체 인 경우 중괄호는 NSDictionary 개체를 나타내며 괄호는 NSArray 개체를 나타냅니다.

일반적인 파싱 된 JSON 객체를 표시하는 것처럼 보입니다. 현대 목표 C를 사용하는 경우 단순히,

NSDictionary *entity = [jsonObject objectForKey:@"entities"]; 
NSArray *media  = [entity objectForKey:@"media"]; 
NSDictionary *media0 = [media objectAtIndex:0]; 
NSString *display_url = [media0 objectForKey:@"display_url"]; 
NSArray *sizes  = [media0 objectForKey:@"sizes"]; 
NSDictionary *size0 = [sizes objectAtIndex:0]; 

또는 : 당신은 다음과 같이 위의 출력은 말하자면,라는 일부 NSDictionaryNSLog을 수행하여 생성 된 것으로 가정 jsonObject 그것을 해독 할 수

NSDictionary *entity = jsonObject[@"entities"]; 
NSArray *media  = entity[@"media"]; 
NSDictionary *media0 = media[0]; 
NSString *display_url = media0[@"display_url"]; 
NSArray *sizes  = media0[@"sizes"]; 
NSDictionary *size0 = sizes[0]; 

1

iOS 5.0 NSJSONSerialization의 새로운 기능을 사용하지 않는 이유는 JSON 데이터를 NSArray 또는 NSDictionary와 같은 Objective C 스탠다드로 변환하기 때문입니다.

NSString *stringURL = [NSString stringWithFormat:@"%@?%@", kTwitterApi, kParams]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:stringURL]]; 
request.HTTPMethod = @"GET"; 

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 

    if (error) { 
     NSLog(@"Error%@", error.localizedDescription); 
    }else { 
     NSError *err; 
     NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&err]; 

     NSLog(@"%@", json); 
    } 

}]; 
+0

그게 내가하는 일이야. NSDictionary의 NSArray에 JSON을 변환하기 위해 NSJSONSerialization을 사용합니다. Obj C 클래스 (짹짹) 내가 트위트를 나타내는 데 사용하는 Jastor의 하위 클래스, 그래서 일단 내가해야 할 일은 NSDictionary입니다. Tweet * t = [[Tweet alloc] initWithDictionary : dic]; 개체를 얻으려면. – lontra

+0

나는 그것을 얻었다. 자동 모델 빌더를 결코 사용하지 않았다. 버그 및 실수를 피하고 내 개체의 모든 NSCoding 기능을 지원하기 위해 항상 모델 논리를 직접 작성했습니다. – pbibergal