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
相关产品推荐
相关产品推荐

