PHP调用YouTube转MP3 API返回字符串如何转数组/JSON对象?
问题根源
你混淆了json_encode和json_decode的功能:
json_encode:用于将PHP数组/对象转换为JSON格式字符串,你调用的接口本身返回的就是标准JSON字符串,再次调用encode相当于把字符串又做了一次序列化,自然还是字符串类型,无法通过下标取值json_decode:用于将JSON格式字符串转换为PHP可操作的数组/对象,才是你需要用到的方法
修复步骤
- 替换loader方法中返回部分的逻辑,将
json_encode改为json_decode,传入第二个参数true即可得到关联数组,支持通过下标直接读取字段 - 你示例中的接口返回自带转义斜杠(比如
{\"Status\"格式),可以先调用stripslashes()处理后再解码,避免解码失败 - 新增JSON解码异常判断,避免接口返回异常时产生PHP报错
修改后完整代码
$response = $YouTubeLink->loader($_GET["ID"]); // 调用后直接可以用 $response['Title'] 等下标取对应字段 function loader($ID) { $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => "https://youtube-to-mp32.p.rapidapi.com/api/yt_to_mp3?video_id=$ID", CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => [ "x-rapidapi-host: youtube-to-mp32.p.rapidapi.com", "x-rapidapi-key: a3ab095a57msh2d08de201b482cbp1559dcjsnaa6636261faa" ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; return []; } else { // 先去除转义斜杠,再转成关联数组 $response = stripslashes($response); $result = json_decode($response, true); // 处理解码失败的情况 if (json_last_error() !== JSON_ERROR_NONE) { return []; } return $result; } }
取值示例
修改完成后可直接通过下标读取对应字段:
echo $response['Status']; // 输出 Success echo $response['Title']; // 输出视频标题 echo $response['Download_url']; // 输出下载链接
内容的提问来源于stack exchange,提问作者marshel111
相关产品推荐
相关产品推荐

