2013-05-17 2 views
2

JSON 요청에서 base64 문자열을 구문 분석 할 수없는 이유는 무엇입니까? 작은 줄로 만들면 효과가 있습니다. JSON에서 base64 이미지를 구문 분석하는 방법

조금 명확히하기 :

else if([connection isEqual:self.appearanceConnection]){ 

     NSArray *arrayOfAppearances = [NSJSONSerialization JSONObjectWithData:[[[NSString alloc] initWithData:data 
                            encoding:NSUTF8StringEncoding] dataUsingEncoding:NSUTF8StringEncoding]options:NSJSONReadingAllowFragments error:&error]; 
     NSLog(@"het aantal appearances is: %i", arrayOfAppearances.count); 
     [self syncAppearances:arrayOfAppearances]; 



    } 

난 작은 문자열로 편집 할 때, 나는 내가의 기본 64로 다시 변경하면 수신 된 배열의 길이가 1이라는 응답을 얻을 영상, 길이가 0이다

http://cl.ly/image/470Z0X1P3K1b (화상 양식 JSON 응답)

enter image description here

I는 세인트 탈 에러 링 :

enter image description here

+0

예가 무엇입니까? ... 당신은 json 첫번째 것을 올바르게 해독하고 있습니까? –

+0

base64 문자열을 데이터로 변환하고 그로부터 이미지를 초기화 하시겠습니까? – Marcel

+0

이유는 없습니다. 잘 작동합니다. 아마도 게시하지 않은 코드에서 뭔가 잘못하고있는 것일 수도 있습니다. –

답변

5

업데이트 답 :

이제 JSONObjectWithData가 오류를보고 있음을 알려 :

Unterminated string around character 62

문자 (62)는 로고의 시작이다. 모든 스크린 스냅 샷에서 JSON의 끝 부분을 보지 못했습니다. 잘린 것처럼 보입니다.

당신이 data을 채우는 방법 당신은 우리를 표시하지 않은,하지만 당신은 NSURLConnection를 사용하고 있지만 전체 결과를 기다리고 만 connectionDidFinishLoading으로하여 JSON 구문 분석을 호출 반대로 didReceiveData에서 분석하려는 거의 것 같습니다

. NSURLConnection은 긴 응답을 didReceiveData에 대한 여러 호출로 나누므로 그 중 NSData을 모두 NSMutableData에 추가하고 모든 항목을 검색 한 후에 만 ​​구문 분석을 시도해야합니다.

(a) 데이터를로드하는 코드 및/또는 (b) 전체 JSON을 공유해야합니다. JSON이 제대로 종료되지 않았거나 전체 내용이 다운로드되기 전에 구문 분석하려고 시도 중입니다 (아마도 후자).


원래 답 :

NSArray *arrayOfAppearances = [NSJSONSerialization JSONObjectWithData:[[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] dataUsingEncoding:NSUTF8StringEncoding]options:NSJSONReadingAllowFragments error:&error]; 

간단해야한다 :

NSArray *arrayOfAppearances = [NSJSONSerialization JSONObjectWithData:data 
                   options:0 
                   error:&error]; 

나는이 문제입니다,하지만 라인은 말한다 있는지 확실하지 않습니다 JSONObjectWithData 메서드는 이 아닌 NSData을 사용합니다.

이 방법으로 반환 된 항목이없는 경우 error의 내용을 검토하고 내용을 확인해야합니다.

여전히 문제를 파악할 수 없다면 JSON 응답 전체를 Google과 공유하거나 (URL을 제공하거나 어딘가에 업로드 할 수 있습니다) 검토해 볼 수 있습니다.

+0

고마워 Rob, 참으로 문자열로 먼저 번역하는 것은 어리석은 일이었습니다 ... 오류 : Error Domain = NSCocoaErrorDomain Code = 3840 "작업을 완료 할 수 없습니다 (코코아 오류 3840)."(문자 주위에 끝나지 않은 문자열 62.) UserInfo = 0x8336280 {NSDebugDescription = 문자 62 주변의 종결되지 않은 문자열}} 내 생각에 문자열이나 다른 문자를 나눌 e 문자가 있다는 것입니까? 내가 어떻게이 문제를 해결할 수 있는지 아십니까? 감사! – leke

+1

NSJSONReadingAllowFragments를 잘라 냈습니다. 복사/붙여 넣기가 많이있었습니다. 당신은 절대적으로 옳았습니다. 나는 didreceivedata에서 데이터를 분석하려고 시도 했었습니다. 나는 dofinishlaunching 방법으로 이것을 수행하려고 노력했습니다. 감사! – leke

2

@Rob에게 큰 감사를드립니다!여기

조금 요약 :

  • 변수 NSMutableData가 didReceiveData에서
  • 을합니다 (있는 viewDidLoad에서 초기화하는 것을 잊지 마세요) 만들기, 당신은 [self.appearancedata를 사용하여 가변 데이터에 데이터를 추가 appendData : 데이터];
  • 연결 DidFinishLoading에서 JSON을 구문 분석합니다.
+1

우수. FYI, 사소한 세부 사항이지만, 사람들은''didReceiveResponse' '에서 NSMutableData' 객체를 초기화 할 것입니다. (http://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLConnectionDataDelegate_protocol/Reference/Reference.html # // apple_ref/occ/intfm/NSURLConnectionDataDelegate/connection : didReceiveResponse :) 연결이 성공했는지 진행 중이라는 것을 알기 때문입니다. 하지만 문제를 해결해 주어서 기쁩니다! – Rob

관련 문제