Я пытаюсь декодировать ответ 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);