2014-05-09 4 views
1

구문 분석에 문제가 있습니다. JSON입니다. 출력 문자가 왜곡됩니다.JSON을 구문 분석하는 방법

이 문제를 해결하는 방법을 알려주십시오. 다음 문제는 무엇이 문제가됩니까?

NSLog(@"Dictionary '%@'",dictionary); // ◀︎ here 
- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
NSString *urlString=[NSString stringWithFormat:@"http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=4f46fcd28f4b15e3&lat=34.678&lng=135.52&range=5&order=4&format=json"]; 
NSString *urlUTF8=[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSURL *url=[NSURL URLWithString:urlUTF8]; 

NSString *jsonString=[self performServerRequestWithURL:url]; 


NSDictionary *dictionary=[self parseJSON:jsonString]; 
NSLog(@"Dictionary '%@'",dictionary); // ◀︎ here 

} 

-(NSString*)performServerRequestWithURL:(NSURL*)url 
{ 
NSError *error; 
NSString *resultString=[NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; 

if(resultString == nil){ 
    NSLog(@"ダウンドード失敗:%@",error); 
    return nil; 
} 
return resultString; 
} 

-(NSDictionary*)parseJSON:(NSString*)jsonString 
{ 
NSData *data=[jsonString dataUsingEncoding:NSUTF8StringEncoding]; 

NSError *error; 
id resultObject=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; 


if([resultObject isKindOfClass:[NSDictionary class]]){ 
    NSLog(@"its an dictionary"); 
    NSDictionary *jsonDictionary=(NSDictionary*)resultObject; 

} else { 
    NSLog(@"its probably a array"); 
    NSArray *jsonArray=(NSArray*)resultObject; 
     } 



return resultObject; 
} 
+1

당신은'return resultObject; '를 반환하고 있지만'return yourDicName'이어야합니다; – iPatel

+1

@iPatel, You'r right. –

+0

이 질문에 답변 해 주셔서 감사합니다. [return resultObject]를 [return jsonDictionary]로 바꿔야합니까? 하지만 잘 작동하지 않습니다. 죄송합니다. – key

답변

0

당신의 코드는 @iPatel이 말한대로 resultobject 대신에 사전을 반환하면됩니다.

코드에서이 코드를 바꿉니다 ..

-(NSDictionary*)parseJSON:(NSString*)jsonString 
{ 
    NSData *data=[jsonString dataUsingEncoding:NSUTF8StringEncoding]; 

    NSError *error; 
    id resultObject=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; 

    NSDictionary *jsonDictionary; 
    if([resultObject isKindOfClass:[NSDictionary class]]){ 
     NSLog(@"its an dictionary"); 
     jsonDictionary=(NSDictionary*)resultObject; 
     NSLog(@"jsonDictionary : %@",jsonDictionary); 

    } else { 
     NSLog(@"its probably a array"); 
     NSArray *jsonArray=(NSArray*)resultObject; 
     NSLog(@"jsonArray : %@",jsonArray); 
    } 
    return jsonDictionary; 
} 

그러나 코드가있는 NSArray를 포함은 또한 당신이 어떤을 반환 할 수 있도록 ID로 반환 형식을 변경해야보다 JSON 중 하나를 배열 또는 사전을 할 수 있다는 것을 의미하지 목.

+0

답변 해 주셔서 감사합니다. 이 코드를 시도했지만 출력 문자는 다음과 같습니다. \ U8cb8 \ U5207 \ U53ef \ Uff1a \ U4f55 \ U306a \ U308a \ U3068 \ U3054 \ U76f8 \ U8ac7 \ U4e0b \ U3055 \ U3044 \ U3002 .... – key

+0

감사합니다. – key

+0

문제는 중국어 텍스트입니다. 당신이 json 중국어 텍스트를 변환하면 오른쪽으로 변환되지 않습니다. – Dilip

관련 문제