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

PHP如何从远程PHP文件提取并格式化非标准JSON数据?

解决从逗号分隔的多JSON对象中提取数据的问题

问题根源

resc_payouts.php输出的是多个独立JSON对象用逗号拼接的内容(比如{"username":"user1"},{"username":"user2"}),这不符合标准JSON格式——标准JSON只能是单个对象或包裹在[]里的数组结构,直接用json_decode解析必然失败。

可行解决方法

方法1:包装成合法JSON数组(推荐)

获取原始数据后,给字符串前后加上[和],将其转换为标准JSON数组再解析:

// 获取远程PHP输出的内容
$rawData = file_get_contents('resc_payouts.php');
// 包装成合法的JSON数组格式
$validJson = '[' . $rawData . ']';
// 解析为关联数组(第二个参数设为true)
$data = json_decode($validJson, true);

// 遍历提取username
if ($data !== null) {
    foreach ($data as $item) {
        echo $item['username'] . '<br>';
    }
} else {
    // 解析失败时输出错误信息排查问题
    echo 'JSON解析失败:' . json_last_error_msg();
}

方法2:正则匹配单个JSON对象解析

如果担心包装数组后因单个JSON对象内部含未转义逗号导致解析失败,可用正则匹配完整的JSON对象逐个解析:

$rawData = file_get_contents('resc_payouts.php');
// 匹配完整的JSON对象(适用于非嵌套的简单场景,复杂嵌套需调整正则)
preg_match_all('/\{[^{}]*\}/', $rawData, $matches);

if (!empty($matches[0])) {
    foreach ($matches[0] as $jsonStr) {
        $item = json_decode($jsonStr, true);
        if ($item !== null) {
            echo $item['username'] . '<br>';
        } else {
            echo '单个JSON解析失败:' . json_last_error_msg() . '<br>';
        }
    }
}

补充:替代file_get_contents的方案

如果服务器禁用了allow_url_fopen,改用curl获取远程内容:

$ch = curl_init('resc_payouts.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$rawData = curl_exec($ch);
curl_close($ch);

// 后续解析步骤同上述方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:45:36