微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – json_decode for Google Dictionary API

我正在尝试使用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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐