PHP JSON谷歌定义-访问值
EDIT4:json_解码失败,并在看似有效的json字符串上返回null。有关更多信息,请参见下文 我是JSON/JSONP新手,在使用PHP访问返回的JSON中的值时经常遇到麻烦。我已经使用在这块板上找到的代码剥离了JSONP回调,没有任何问题。我从中得到了一个JSONP结果,并努力获取第一个结果的含义。这是一个相当复杂的结果,我需要从下面的JSON结果中访问节点文本中的第一个含义 我最好的尝试是:PHP JSON谷歌定义-访问值,php,json,Php,Json,EDIT4:json_解码失败,并在看似有效的json字符串上返回null。有关更多信息,请参见下文 我是JSON/JSONP新手,在使用PHP访问返回的JSON中的值时经常遇到麻烦。我已经使用在这块板上找到的代码剥离了JSONP回调,没有任何问题。我从中得到了一个JSONP结果,并努力获取第一个结果的含义。这是一个相当复杂的结果,我需要从下面的JSON结果中访问节点文本中的第一个含义 我最好的尝试是: if (isset($json->primaries[1]->entries
if (isset($json->primaries[1]->entries[1]->terms[1]->text))
以上是我所能做的最好的,我只是在尝试返回文本节点时不断出现错误,说它未定义。如果可能的话,我更喜欢使用对象而不是关联数组,所以请避免告诉我将其设置为返回assoc数组
任何帮助都将不胜感激。我真的被卡住了:P
编辑:
$json->primaries[1]->entries[1]->terms[0]->text似乎也不起作用。这是完整的脚本。忽略$params数组,因为它没有被使用,我们将使用它来生成查询
该脚本在我第一次发布时就已经被编辑过,因为我有一个无效的JSON对象,但是这个错误似乎已经被修复,因为它现在将通过JSON格式化程序进行解析
我在打印值时遇到的错误是
PHP注意:尝试在第23行的/home/outil2/Plugins/GDefine.PHP中获取非对象的属性
EDIT2:添加了json_解码,这是我最初的解决方案,但在第二个版本中丢失了
<?php
class GDefine extends Plugin {
public static $enabled = TRUE;
public function onReceivedData($data) {
if ($data["message"][0] == ".def") {
$params = array (
"callback" => "a",
"sl" => "en",
"tl" => "en",
"q" => $data["message"][1]
);
$jsonp = file_get_contents(
"http://www.google.com/dictionary/json?callback=a&sl=en&tl=en&q=" . $data["message"][1]);
$json = json_decode(substr($jsonp, 2, strlen($jsonp)-12));
var_dump($json);
print_r($json->primaries[1]->entries[1]->terms[0]->text);
if (isset($json->primaries[1]->entries[1]->terms[0]->text)) {
$text = $this->bold("Google Definition: ");
$text .= $this->teal($json->primaries[1]->entries[1]->terms[0]->text);
$this->privmsg($data["target"], $text);
} else {
$this->privmsg($data["target"], "error error error");
}
}
}
}
我对它进行解码,它返回NULL:您试图访问一个不存在的对象。您的代码:
if (isset($json->primaries[1]->entries[1]->terms[1]->text)) // Doesn't exist
初选[1]的条目[1]中没有[1]项。只有一个项目;条款[0]。我认为这会起作用,例如:
if (isset($json->primaries[1]->entries[1]->terms[0]->text))
数组中的第一项由0而不是1索引,可能是您的错误
编辑:
您还需要解码JSON,更改:
$json = substr($jsonp, 2, strlen($jsonp)-12);
致:
编辑:
您还需要在JSON中转义一些未转义的字符。将此添加到您的代码中:
更改:
$json = json_decode(substr($jsonp, 2, strlen($jsonp)-12));
致:
堆栈溢出不是板。当然,这是最重要的一点。您的PHP代码的其余部分在哪里?您需要显示一个var_dump或print_r$json来验证它是否已成功解码。您好,感谢您的帮助,这似乎让我找到了理解符号的正确途径,但是我仍然会遇到这样的错误:PHP注意:试图在第23Ahhh行的/home/outil2/Plugins/GDefine.PHP中获取非对象的属性,我无意中没有在编辑的代码中添加该属性。然而,我现在在var_dump中得到一个NULL结果-这是否表示json结果无效?是的,如果解码失败,则返回NULL。这很奇怪,因为根据linter的说法,pastebin中的JSON是有效的。我认为我的substr语句似乎很好,而且我将未编码的var_转储粘贴到JSON格式化程序中,得到了有效的结果……只要让它工作起来,你必须转义一些字符,我已经再次更新了答案。
$json = json_decode(substr($jsonp, 2, strlen($jsonp)-12));
$json = json_decode(substr($jsonp, 2, strlen($jsonp)-12));
$json = substr($jsonp, 2, strlen($jsonp) - 12);
$json = str_replace("\\", "\\\\", $json);
$json = json_decode($json);