You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP从指定JSON文件中获取videoId?现有代码无返回值

解决PHP提取JSON中videoId的问题

Hey Karan,我仔细看了你的问题和代码,发现两个核心问题导致没拿到想要的结果:一是你没先获取远程JSON的实际内容,二是没匹配到JSON的真实层级结构。下面给你两种靠谱的实现方法,带详细解释:

先搞清楚关键问题

  1. 你没获取到正确的JSON数据:直接访问你给的pastebin链接返回的是网页HTML,不是纯JSON,必须用它的raw格式链接才能拿到纯净的JSON内容。
  2. JSON层级不对:目标JSON里的videoId不是顶层字段,它嵌套在items数组下的每个item的id对象里,所以不能直接遍历整个解析后的JSON对象。

方法一:用file_get_contents(简单场景)

适合服务器开启了allow_url_fopen的情况,代码简洁:

// 转换为pastebin的raw格式链接,获取纯JSON
$rawJsonUrl = 'https://pastebin.com/raw/gXcnNnUK';
// 获取远程JSON内容
$jsonContent = file_get_contents($rawJsonUrl);

// 检查是否获取成功
if (!$jsonContent) {
    die('无法加载JSON内容,请检查链接或网络');
}

// 解析JSON为关联数组
$parsedData = json_decode($jsonContent, true);

// 检查JSON解析是否出错
if (json_last_error() !== JSON_ERROR_NONE) {
    die('JSON解析失败:' . json_last_error_msg());
}

// 遍历提取videoId
if (isset($parsedData['items']) && is_array($parsedData['items'])) {
    foreach ($parsedData['items'] as $item) {
        // 确保字段存在,避免报错
        if (isset($item['id']['videoId'])) {
            echo $item['id']['videoId'] . PHP_EOL;
        }
    }
} else {
    echo '未找到包含videoId的items数组';
}

方法二:用cURL(更稳定兼容)

如果你的服务器禁用了allow_url_fopen,cURL是更可靠的选择,适配更多环境:

$rawJsonUrl = 'https://pastebin.com/raw/gXcnNnUK';

// 初始化cURL会话
$ch = curl_init($rawJsonUrl);
// 设置返回结果而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 自动跟随重定向
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// 设置超时时间,避免卡住
curl_setopt($ch, CURLOPT_TIMEOUT, 10);

// 执行请求并获取内容
$jsonContent = curl_exec($ch);
// 获取HTTP状态码,判断请求是否成功
$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// 关闭cURL会话
curl_close($ch);

// 检查请求是否成功
if ($httpStatusCode !== 200 || !$jsonContent) {
    die('获取JSON失败,HTTP状态码:' . $httpStatusCode);
}

// 后续解析和提取和方法一一致
$parsedData = json_decode($jsonContent, true);

if (json_last_error() !== JSON_ERROR_NONE) {
    die('JSON解析失败:' . json_last_error_msg());
}

if (isset($parsedData['items']) && is_array($parsedData['items'])) {
    foreach ($parsedData['items'] as $item) {
        if (isset($item['id']['videoId'])) {
            echo $item['id']['videoId'] . PHP_EOL;
        }
    }
} else {
    echo '未找到包含videoId的items数组';
}

额外提示

  • 加入错误处理很重要,能帮你快速定位是网络问题、JSON格式问题还是层级问题。
  • 如果你需要把提取到的videoId存起来而不是直接输出,可以用一个数组收集:
    $videoIds = [];
    foreach ($parsedData['items'] as $item) {
        if (isset($item['id']['videoId'])) {
            $videoIds[] = $item['id']['videoId'];
        }
    }
    // 之后可以用print_r($videoIds)查看所有videoId
    

内容的提问来源于stack exchange,提问作者Karan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:51:07