我正在尝试使用PHP解码Google Dictionary API JSON响应,但我遇到的问题似乎无法解析响应(json_decode返回NULL).
一个示例JSON响应位于here(搜索单词“oracle”).
JSON API要求您提交回调函数,因此我选择了一些非常简短的东西(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);