2013-10-02 5 views
0

JSON을 반환하는 서비스를 사용해야합니다. 나는 그 서비스 (제 3 자)에 어떠한 영향도 미치지 않는다. 내가" '"(형식이 잘못된) json 문자열을 읽습니다.

JSON.parse (data) 

을 할 경우

가 나는

SyntaxError: Unexpected token 

내가 오류가 입력 매개 변수에 따라 발생하기 때문에 서비스가 작동 알 수. 즉, 때로는 확실히 작동합니다! HTTP 응답 코드는 200이므로 어떤 종류의 액세스 오류가 아니며 반복 가능합니다.

잘못된 JSON을 반환한다고 가정 할 수 있습니까? 디스크에 텍스트 파일로 데이터를 작성하고 이런 식으로 읽기 :

때 fs = 종류 그것 때문에 이상하다 ('FS')

fs.readFile 'output.json', '', (err, data) -> 
    if err? 
    console.log err 
    json = JSON.parse(data) 
    console.log json 

반환

undefined:1 
De L\'Embustier 
    ^
SyntaxError: Unexpected token ' 
    at Object.parse (native) 

을 필요로 마치 문자열이 올바르게 이스케이프 처리 된 것처럼 보이지만 올바르게 읽히지는 않습니다.

파일의 크기는 300 + k입니다. 그것을 붙이는 방법을 보지 못했습니다.

편집 : jsonlint.com

Parse error on line 1297: 
...   "Address": "36 Rue De L\'Embust 
-----------------------^ 
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[' 

EDIT2에서 응답 : http://pastebin.com/ACUfvPCx

+1

끝 부분에 구문 오류가있는 것 같습니다. –

+0

그게 내 생각이기도합니다. – faboolous

+4

데이터의 유효성 검사를 시도하십시오 : http://jsonlint.com/ 그리고 그 내용을 말해주십시오. – Guffa

답변

6

서비스가 실제로 반환 잘못된 JSON : 다음은 다음 전체 파일입니다.

JSON에는 \' 이스케이프 시퀀스가 ​​없습니다. Javascript에서 모든 문자를 이스케이프 처리하는 것은 완벽하지만 JSON은 자바 스크립트 구문의 하위 집합을 사용하며 실제 이스케이프가 필요한 이스케이프 문자 만 허용합니다. 아포스트로피는 JSON에서 문자열 구분 기호로 사용되지 않으므로 이스케이프가 필요하지 않습니다.

서비스를받을 수없는 경우 JSON을 일반 텍스트로 요청하고 이스케이프 된 아포스트로피를 아포스트로피로 바꾼 다음 텍스트를 JSON으로 구문 분석해야합니다.

관련 문제