2012-01-03 2 views
1

https://www.googleapis.com/freebase/v1/search?query=madonna#JSON 와 X26은 JSON 결과가 PHPs의 json_decode를 파괴한다 PHPs의 json_decode에게

나누기. 정확히 말하면, 다음 문자열은 디코딩을 깨는 것입니다 : "Sticky \ Swamp Tour".

브라우저는 그러나 그것을 이해할 수있을 것 : 그것은 잘못된 JSON을의 http://jsfiddle.net/nggX2/ & http://jsfiddle.net/QUVFt/

http://jsonlint.com/ 주장. PHP의 측면에서

나는 시도했다 : http://codepad.viper-7.com/suUbQDhttp://codepad.viper-7.com/QjqCH7

무슨 일이 일어나고 있는지에 대한 어떤 생각을?

+0

왜 JSON 형식이 아닌 문자열을 디코딩하려고합니까? – Michael

+0

JSON 형식이 아닌 이유는 무엇입니까? – Slavic

+0

jsonlint.com에서 나에 대해 유효하지 않습니다. 나는'\ x' 표기법이 JSON에서 허용되지 않는다고 생각한다. '\ u0026'이 아니어야합니까? – cmbuckley

답변

7

이것은 잘못된 JSON입니다. 해당 URL의 응답이 잘못되었습니다. JSON은 \xXX 두 자리 16 진수 이진 이스케이프 시퀀스를 허용하지 않으며 유니 코드 코드 포인트 이스케이프 시퀀스 만 \uXXXX 개만 허용합니다. 여기에 그냥 &, 있어야합니다 - 이스케이프 시퀀스가 ​​필요합니다.

왜 google/freebase이 잘못된 JSON을 출력하는지 알 수 없습니다.

+1

브라우저가 왜 그것을 이해합니까? – Peeter

+0

JSON ('JSON.parse' 예제)이나'eval()'메커니즘을 사용하여 JSON ('$ .getJSON() ')을 평가할 수있는 유효한 자바 스크립트 구조입니다. 'JSONP 예제와 함께). 이 행동에 의존해서는 안됩니다. –

+1

'google/freebase이 잘못된 JSON을 출력하는 이유는 알 수 없습니다. '- 실제로 이것은보고해야 할 버그처럼 보입니다. 그리고 +1. – DaveRandom

1

귀하의 JSON은 다음과 같이해야합니다 : 그것은 이스케이프 문자이기 때문에

"Sticky \\x26amp; SweetTour" 

슬래시는 탈출해야합니다.

+0

Breaks @ http://jsfiddle.net/arq5J/ – Peeter

+0

@Peeter 문자열을 한 번 이스케이프 처리하기 때문에 이중 따옴표로 작은 따옴표를 먹을 수 있습니다. 이것을 시도하십시오 : http://jsfiddle.net/arq5J/1/ – Kekoa