我试图从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,"结果":[]}
答案 0 :(得分:1)
您需要使用对象语法来访问该属性:
$obj->results[0]->poster_path
将返回您想要的数据。
您的网址编码也有问题。使用preg_replace
的方法是错误的(应该是%20而不仅仅是%),但它也很天真,因为它没有考虑输入中的其他可能的编码问题。 PHP有一个内置函数urlencode
(http://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中的空格,这意味着它无法找到结果,所以它失败了。