2012-01-03 3 views
1

https://www.googleapis.com/freebase/v1/search?query=madonna#JSON с x26 значений разбивает ПГПС json_decode

Результат JSON нарушает ПГПС json_decode. Если быть точным, следующая строка прерывает декодирование: «Sticky \ x26amp; Sweet Tour».

Браузеры Однако, кажется, чтобы быть в состоянии понять: http://jsfiddle.net/nggX2/ & http://jsfiddle.net/QUVFt/

http://jsonlint.com/ утверждает, что это недопустимое JSON.

На стороне PHP, я попытался: http://codepad.viper-7.com/suUbQD и http://codepad.viper-7.com/QjqCH7

Любые мысли о том, что происходит?

+0

Почему вы пытаетесь декодировать строку, которая не находится в формате JSON? – Michael

+0

Почему вы говорите, что это не в формате JSON? – Slavic

+0

jsonlint.com говорит мне недействительным. Я не думаю, что в JSON допускается обозначение '\ x'. Разве это не должно быть '\ u0026'? – cmbuckley

ответ

7

Что происходит, это недействительно JSON. Ответ от этого URL-адреса неверен - JSON не разрешает двухзначные шестнадцатеричные двоичные escape-последовательности \xXX, только \uXXXX escape-последовательности кода кода Unicode. Здесь это должно быть только &, хотя - не требуется escape-последовательности.

Не знаю, почему google/freebase выводит неверный JSON.

+1

Почему браузеры это понимают? – Peeter

+0

Это действительная конструкция javascript, поэтому либо браузеры разрешимы в 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

Смежные вопросы