2013-05-09 2 views
1

이봐, 여기에 약간 문제가있다. 이 코드HTML 태그가 JSON 파일을 유효하지 않게합니까?

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSError *error = nil; 
    NSDictionary *JSONdata = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:&error]; 
     self.data = JSONdata; 
    [self.tableView reloadData]; 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
}]; 

AFHTTPRequestOperation를 사용하여 JSON 파일을로드 할 수 있지만 내가 여기 someurl.com/json.html 에서이 JSON을로드 할 때 JSONdata가 null 된 것은 내가 시도 JSON

{ 
"status": 200, 
"results": [ 
    { 
     "author": { 
      "username": "user1", 
      "full_name": "User 1" 
     } 
    } 
] 
} 
<!-- This document saved from someurl.com/json.html --> 

입니다 그 파일을 다운로드해서 loaclhost에서 접근하고, 여전히 null을 얻었습니다. 그런 다음 html 태그 <!-- This document saved from someurl.com/json.html -->을 수동으로 제거한 다음 JSON을로드 할 수 있습니다.

내 결론은 JSON을 유효하지 않게 만드는 html 태그입니다. JSON 파일에서 해당 태그를 제거하려면 어떻게해야합니까? NSJSONSerialization에 코드를 추가해야합니까?

답변

3

JSON 문자열은 완전히 자체 포함되어야합니다. JSON 데이터 이외의 다른 것을 포함 할 수 없습니다. 당신은 JSON 데이터 후 또는 전에 무엇이든이있는 경우

var x = {"status":200}; 
     ^^^^^^^^^^^^^^---raw json text 

, 당신은 기본적으로 자바 스크립트 구문 오류

을 만들 : 그것은 자바 스크립트 변수 할당의 오른쪽에 거의 동일하게 고려
var x = foo{"status":200}bar; 
     ^^^---   ^^^--- 

위의 경우 bar 위의 경우는 HTML 주석이됩니다. 완전히 유효한 JSON이거나 완전히 유효하지 않습니다. 중간에는 없습니다.

+0

아. 소스 JSON으로 아무것도 할 수 없기 때문에 어떻게 처리해야합니까? 전체 파일을 다운로드하고 json 만 분리해야합니까? –

+1

예. json 공급자를 제어 할 수없는 경우 "깨진"데이터를 유효한 json으로 마사지해야합니다. 하지만 정말로 ... 공급자는 깨진 시스템을 고쳐야합니다. –

+0

이제 html 태그에서 json을 분리 할 수 ​​있지만 결과는 NSString입니다. 그것을 nsdictionary로 변환하는 방법? –