php - Google Dictionary API 的 json_decode

标签 php json

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

关于php - Google Dictionary API 的 json_decode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6889764/

相关文章:

ruby-on-rails - Rails 强参数 - POST 一个 json 数组 + 一个额外的根字段

ubuntu - libpcre.so.3.13.1 中的 php5-fpm 段错误 6

php - 存储过程在 php/mysql 世界中是行不通的吗?

php - Jquery .clone() 导致 $.post 失败

php - 是否有内置方法来获取 Doctrine 2 实体中所有更改/更新的字段

json-server-使用嵌套请求

javascript - 如何在 JSONP 调用中使用回调函数名称包装响应?

asp.net-mvc - AJAX错误处理

php - str_replace 从字符串中的特定位置开始

java - 在 Android 中解析复杂的 JSON