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);

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...