2012-04-04 14 views
13

Sencha Touch 앱이 있습니다. 내가 가지고있는 매장 중 하나는 ajax 프록시와 json 리더를 사용합니다.JSON 응답에 잘못된 문자가 있습니다.

"description": "Each of the levels requires logic, skill, and brute force to crush the enemy.

" 
: 기간 및 종료 따옴표 사이에, 여기에 두 번째 문자열에 두 번 http://www.fileformat.info/info/unicode/char/2028/index.htm

이 보이지 않는 비록, 문자가 발생합니다 JSON 내시나 응용 프로그램에서 반환에 문자열의 일부는 종종이 문자를 포함

복사 및 붙여 넣기를 시도해보십시오. "각 레벨에 적과 충돌하는 논리, 기술 및 무력이 필요합니다."를 자바 스크립트 콘솔에 붙여 넣으십시오! 문자열로 구문 분석되지 않으며 SyntaxError: Unexpected token ILLEGAL으로 실패합니다.

이로 인해 JSON 응답이 실패합니다. 나는 오랫동안 이것에 붙어있어! 어떤 제안?

+1

왜 그냥 서버 측에서 출력 JSON 문자열에서 잘못된 문자를 제거? –

+0

@MaratTanalin 지금까지 살펴 보았지만 최근까지는 서버에 액세스 할 수 없었습니다. 나는 클라이언트 측 해결책이 없다고 생각하니? – nnyby

+3

문자열이 잘못된 JavaScript 리터럴 인 경우 (예를 들어 알 수 없지만 이스케이프되지 않은 줄 바꿈은 JS 리터럴에서 허용되지 않음) 클라이언트 측 솔루션이 존재하지 않을 수 있습니다. 어쩌면 JSON 대신 JSON Ajax 응답을 _text_로 가져오고 문자열에서 원하지 않는 문자를 필터링 한 다음 필터링 된 문자열을 JSON 문자열로 구문 분석 할 수도 있습니다. 불행히도 그것은 해결 방법입니다. JSON 문자열에서 불법 문자의 특성을 찾아서 이유를 해결하는 것이 좋습니다. –

답변

5

이 문제를 해결하는 유일한 방법은 서버 쪽뿐입니다. JSON 생성기가 이스케이프 처리 된 문자를 내보내는 지 확인하십시오. \u2028으로

필자의 경험에 따르면 JSON을 일반 ASCII 형식으로 인코딩하면 쉽게 사용할 수 있습니다. 단점은 ASCII가 아닌 문자가 더 많은 공간을 차지하므로 효율적이지 않다는 것입니다. 따라서 빈도에 따라 그 절충을 원하지 않을 수도 있습니다 ...

Perl의 JSON :: XS 설명서에는 문제에 대한 좋은 설명과 Perl로 해결하는 방법에 대한 조언 :

+1

링크가 고정되었습니다. 감사. – Lasse

0

개념적으로 올바른 JavaScript 리터럴 인 서버에서 적절한 이스케이프 처리를 통해 문자열을 보낼 수 있습니다.

var a = escape("Each of the levels requires logic, skill, and brute force to crush the enemy."); 
alert(unescape(a)); 

을하지만 서버에서 탈출해야하기 때문에 토론은 사용되지 않습니다 : 당신은 당신이 여분의 해결 단계를 필요로하는 클라이언트에서이 문제를 해결하려면

(단지 파이어 폭스에서 작동하는 것 같다) .

+3

코드를 구문 분석 할 수 없습니다. _fix_ 클라이언트 측에서! –

+0

나를 위해 그것은 방화범이 끌려와 ff에서 일했다, 당신은 그것을 시험해 보았 느냐? – Sam

+0

Chrome에서 사용해 보았습니다. ':'뒤에 OP 코드의 일부를 복사하여 콘솔에 붙여 넣었습니다. 구문 오류가 있습니다. –

-1

은 응용 프로그램 다음이 하나 괜찮 :

var object = $.parseJSON(json_string); 
관련 문제