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

PHP中如何提取__typename为Clip且name非空的JSON的sourceUrl

问题:从JSON数据中提取符合条件的sourceUrl值

需求:使用PHP从JSON数据集中提取sourceUrl值,需满足两个条件:

  • JSON对象的__typename字段为"Clip"
  • name字段不为空

尝试了以下代码但未得到任何结果:

<?php
$json_url = 'https://jsonblob.com/api/jsonBlob/1154143677919911936';
$json_data = file_get_contents($json_url);

$data = json_decode($json_data, true);

$sourceUrls = [];

foreach ($data as $key => $value) {
    if (
        isset($value['sourceUrl']) &&
        isset($value['__typename']) &&
        isset($value['name']) &&
        $value['__typename'] === 'Clip' &&
        $value['name'] !== ''
    ) {
        $sourceUrls[] = $value['sourceUrl'];
    }
}

if (!empty($sourceUrls)) {
    foreach ($sourceUrls as $sourceUrl) {
        echo 'sourceUrl: ' . $sourceUrl . '<br>';
    }
} else {
    echo 'none.';
}
?>

问题原因

你提供的JSON数据结构中,目标对象并不在顶层,而是嵌套在edges数组的node字段下。原代码直接遍历顶层$data,无法访问到实际包含__typename、name和sourceUrl的对象。

修正后的代码

<?php
$json_url = 'https://jsonblob.com/api/jsonBlob/1154143677919911936';
$json_data = file_get_contents($json_url);

$data = json_decode($json_data, true);

$sourceUrls = [];

// 先获取edges数组,遍历每个edge节点
if (isset($data['edges']) && is_array($data['edges'])) {
    foreach ($data['edges'] as $edge) {
        // 取出每个edge里的node对象
        $node = $edge['node'] ?? [];
        if (
            isset($node['sourceUrl']) &&
            isset($node['__typename']) &&
            isset($node['name']) &&
            $node['__typename'] === 'Clip' &&
            trim($node['name']) !== '' // 用trim避免空白字符的情况
        ) {
            $sourceUrls[] = $node['sourceUrl'];
        }
    }
}

if (!empty($sourceUrls)) {
    foreach ($sourceUrls as $sourceUrl) {
        echo 'sourceUrl: ' . $sourceUrl . '<br>';
    }
} else {
    echo 'none.';
}
?>

关键修改点

  • 先判断并访问$data['edges']数组,定位到目标数据所在层级
  • 遍历每个edge时,取出node对象进行条件判断
  • 增加trim()处理name字段,避免仅包含空白字符的情况被误判为非空

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:36:22