Intereting Posts
Тот же Facebook, что и кнопка на нескольких страницах? почему мой сценарий не получает значения, которые я цели PHP буферизация вывода – звучит как плохая идея, не так ли? как подсчитать количество элементов в php-ассоциативном массиве PHP: HTML: отправить атрибут выбора HTML в POST GMT Смещение к часовому поясу PHP Формат времени с помощью Highcharts Получить последние 12 месяцев в PHP Веб-приложения: в рамки или нет в рамках? WordPress php Показать только следующую ссылку в той же категории Отправка нескольких CC и BCC с помощью PHP PEAR MAIL Есть ли способ в PHP использовать постоянные данные, как в Java EE? (обмен объектами между потоками PHP) без сеанса и кэша / DB Symfony 2 Security: продолжает перезагружать данные у поставщика услуг? Zend Framework 2 Лучший способ реализации сеансов В PHP, какова разница между объявлением переменной как глобальной внутренней функции или передачей переменной в качестве аргумента функции?

json_decode для API словаря Google

Я пытаюсь декодировать ответ JSON API словаря Google с помощью PHP, но у меня возникает проблема, когда я не могу разобрать ответ ( json_decode возвращает NULL ).

Здесь приведен пример ответа JSON (поиск слова «оракул»).

API JSON требует, чтобы вы отправили функцию обратного вызова, поэтому я выбрал что-то действительно короткое ( a ), поскольку с этим не нужно иметь дело.

Вот мой код:

 <?php $query = 'oracle'; $file = file_get_contents('http://www.google.com/dictionary/json?callback=a&q='.$query.'&sl=en&tl=en&restrict=pr,de&client=te'); var_dump($file); $json = json_decode($file); var_dump($json); ?> 

Google возвращает результат в виде вызова функции. Если вы хотите избавиться от этого, вы можете сделать: так что вам нужно снять эту часть:

 $file = substr($file, 2, -10); 

Кроме того, все шестнадцатеричные символы вызывают беспорядок. Я не знаю, как лучше с ними справиться (они должны быть преобразованы в их характер, но о том, как легко это сделать, требуется мысль). Для целей тестирования вы можете просто их разбить (чтобы увидеть, что он работает). Пытаться:

 $file = preg_replace("/\\\x[0-9a-f]{2}/", "", $file); 

Итак, в конце концов у вас есть:

 <?php $query = 'oracle'; $file = file_get_contents('http://www.google.com/dictionary/json?callback=a&q='.$query.'&sl=en&tl=en&restrict=pr,de&client=te'); // var_dump($file); $file = substr($file, 2, -10); $file = preg_replace("/\\\x[0-9a-f]{2}/", "", $file); echo $file; $json = json_decode($file); var_dump($json); ?> 

Для преобразования символов по мере необходимости я предполагаю, что вы можете использовать preg_replace_callback, но мне не нравится эта функция, особенно когда данные поступают из удаленного источника. Упрощенному может быть просто статическое сопоставление, например:

 $from = array("\x3d", "\x22", ...); $to = array("=", "\"", ...); $file = str_replace($from, $to, $file);