如何从解码的json PHP

时间:2017-10-09 10:43:03

标签: php json

我试图从JSON文件中获取图像链接,我可以通过链接like this检索我遇到的问题是提取正确的数据。我想得到结果数组中的字段poster_path但是我的尝试没有成功。目前这是我的代码 -

$json = 'https://api.themoviedb.org/3/search/movie?api_key=15d2ea6d0dc1d476efbca3eba2b9bbfb&query='.$title;
$json = preg_replace('/\s+/', '%', $json);
$json = file_get_contents($json);
$obj = json_decode($json);
echo $obj->results[0]['poster_path'];
//Have also tried
//echo $obj->results[0]->poster_path;

如果我只尝试访问,例如total_pages数据但是我无法访问结果数组,那么它可以正常工作。

编辑 - 结果数组实际上没有从链接中获取其内容,JSON就像这样 - {" page":1," total_results&#34 ;:0," TOTAL_PAGES":1,"结果":[]}

4 个答案:

答案 0 :(得分:1)

您需要使用对象语法来访问该属性:

$obj->results[0]->poster_path

将返回您想要的数据。

您的网址编码也有问题。使用preg_replace的方法是错误的(应该是%20而不仅仅是%),但它也很天真,因为它没有考虑输入中的其他可能的编码问题。 PHP有一个内置函数urlencodehttp://php.net/manual/en/function.urlencode.php),旨在为您处理这类事情。

最后你有一个奇怪的变量命名 - 你的url字符串使用“$ json”没有任何意义,而且你已经进一步使用该名称来获取来自远程服务器的响应,这使得更有意义。具有不同目的的变量应根据其目的命名,也不得相互冲突/覆盖。这将使您的代码更易于维护。

以下是代码的更好版本:

$url = 'https://api.themoviedb.org/3/search/movie?api_key=15d2ea6d0dc1d476efbca3eba2b9bbfb&query='.urlencode($title);
$json = file_get_contents($url);
$obj = json_decode($json);
echo $obj->results[0]->poster_path;

答案 1 :(得分:0)

$obj->results[0]->poster_path;

应该运作良好。但是某个对象在该属性中有一个null。 E.g:

{
  "vote_count": 0,
  "id": 479701,
  "video": false,
  "vote_average": 0,
  "title": "Test",
  "popularity": 4.92,
  "poster_path": null,
  "original_language": "en",
  "original_title": "Test",
  "genre_ids": [
    28
  ],
  "backdrop_path": null,
  "adult": false,
  "overview": "Testing the APIs",
  "release_date": "2017-10-05"
}

如果你想得到数组而不是对象,你应该将true设置为json_decode的第二个参数:

$obj = json_decode($json, true);

然后您可以将数据作为:

echo $obj['results'][0]['poster_path'];

答案 2 :(得分:0)

28939:S 09 Oct 16:08:32.834 - 0 clients connected (0 slaves), 1327200 bytes in use
28939:S 09 Oct 16:08:32.834 * Connecting to MASTER xxx.xxx.xxx.196:9200
28939:S 09 Oct 16:08:32.835 * MASTER <-> SLAVE sync started
28939:S 09 Oct 16:08:32.835 # Error condition on socket for SYNC: Connection refused
28939:S 09 Oct 16:08:33.837 * Connecting to MASTER xxx.xxx.xxx.196:9200
28939:S 09 Oct 16:08:33.837 * MASTER <-> SLAVE sync started
28939:S 09 Oct 16:08:33.837 # Error condition on socket for SYNC: Connection refused
28939:S 09 Oct 16:08:34.839 * Connecting to MASTER xxx.xxx.xxx.196:9200
28939:S 09 Oct 16:08:34.839 * MASTER <-> SLAVE sync started
28939:S 09 Oct 16:08:34.839 # Error condition on socket for SYNC: Connection refused
28939:S 09 Oct 16:08:35.840 * Connecting to MASTER xxx.xxx.xxx.196:9200
28939:S 09 Oct 16:08:35.840 * MASTER <-> SLAVE sync started
28939:S 09 Oct 16:08:35.840 # Error condition on socket for SYNC: Connection refused
28939:S 09 Oct 16:08:36.744 - Node 982d9b0a50b393d5fe604caefc0acaae68547648 reported node b57d59fb5685daeaac7e249d99fa257e9be66f4f as not reachable.
28939:S 09 Oct 16:08:36.844 * Connecting to MASTER xxx.xxx.xxx.196:9200
28939:S 09 Oct 16:08:36.844 * MASTER <-> SLAVE sync started
28939:S 09 Oct 16:08:36.844 # Error condition on socket for SYNC: Connection refused

我希望这就是你要找的!! 如果没有,请更新您期望的输出

答案 3 :(得分:0)

显然这不是JSON的问题,但是prag_replace正在用%而不是%20替换url中的空格,这意味着它无法找到结果,所以它失败了。