2017-10-09 69 views
0

我试图从JSON文件中获取图像链接,我可以通过链接检索like this我遇到的问题是提取正确的数据。我想获得结果数组内的字段poster_path,但是我的尝试失败了。目前,这是我的代码 -如何从解码的json正确检索文本PHP

$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但是数据Im无法访问的结果阵列。编辑 - 结果数组实际上没有从链接中获取其内容,JSON保持如下形式 - {“page”:1,“total_results”:0,“total_pages”:1,“结果“:[]}

+0

似乎'$ obj-> results [0]'也是一个JSON。 –

+0

@MilanChheda认为你可以写一个答案? – Hamish

+0

我不完全确定特定的API是如何工作的,但是您是否只发布了API密钥?你可能想要隐藏它,并在问题中显示请求响应:) – Ezenhis

回答

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; 
+0

我已经尝试这样做,也没有工作 – Hamish

+0

你得到什么错误?我试过了,很好。看到这个可运行的例子:http://phpfiddle.org/main/code/i5bj-xm9u。我认为在你的情况下唯一可能的区别可能是$ title是无效的,而你没有从API获得你期望的响应。如果标题包含空格,例如问题中提供的示例链接,请确保在将URL附加到基本URL之前对其进行网址编码。 – ADyson

+0

呀在线例子但是工作时,我本地运行它给我的,因为它留下的结果阵列空 – Hamish

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

应该很好。但是一些对象在该属性中有一个null。例如:

{ 
    "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" 
} 

如果你想获得阵列,而不是对象,建议立即进行删除设置truejson_decode第二个参数:

$obj = json_decode($json, true); 

然后你就可以得到你的数据:

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

我仍然得到这个错误 - 注意:未定义的偏移量:0在/Applications/XAMPP/xamppfiles/htdocs/website/search.php第21行,第21行是回音线 – Hamish

+0

你确定'file_get_contents'返回正确的答案?尝试在执行'json_decode'之前调用'var_dump($ json)''。并看看输出。 – poletaew

+0

啊,你说得对所有得到的是这个 - 字符串(57) “{” 页面 “:1,” TOTAL_RESULTS个 “0”,TOTAL_PAGES “:1,” 结果 “:[]}” – Hamish

0
$json = 'https://api.themoviedb.org/3/search/movie?api_key=15d2ea6d0dc1d476efbca3eba2b9bbfb&query=Raiders%25of%25the%25lost%25ark'; 
     $json = preg_replace('/\s+/', '%', $json); 
     $json = file_get_contents($json); 
     $obj = json_decode($json); 
     $result = array(); 
     foreach($obj->results as $key=>$value) 
     { 
      $result[$value->id] = $value->poster_path; 
     } 
     echo $result; 

我希望这是你要搜索的内容! 如果没有请更新你期望的输出

0

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