您的位置:首页 >无换行JSON解析技巧(PHP教程)
发布于2026-04-18 阅读(0)
扫一扫,手机访问

本文介绍在 PHP 中处理格式严重损坏的“伪 JSON”文件(如缺少开头/结尾方括号、键名缺引号、对象间无分隔符)的实用解析策略,通过字符串预处理将其转化为标准 JSON,再用 json_decode() 安全解析。
本文介绍在 PHP 中处理格式严重损坏的“伪 JSON”文件(如缺少开头/结尾方括号、键名缺引号、对象间无分隔符)的实用解析策略,通过字符串预处理将其转化为标准 JSON,再用 json_decode() 安全解析。
当面对非标准文本数据时——例如您提供的文件内容:
{timestamp":"2022-03-25 00:25:41.476+00","order_id":"1659616"}{timestamp":"2022-03-25 00:18:51.892+00","order_id":"1560808"}{timestamp":"2022-03-25 00:23:52.267+00","order_id":"1727305"}它看似 JSON,实则存在多个致命语法错误:
✅ 正确思路不是强行逐字符解析,而是先修复结构,再交由原生 JSON 解析器处理——这更可靠、可维护,且避免正则误匹配等风险。
以下代码将原始文件内容转换为合法 JSON 数组字符串:
// 1. 读取整个文件内容(注意:file() 按行读取但此处无换行,故需合并)
$content = file_get_contents('abovefile.txt'); // 更简洁可靠,替代 foreach(file() as $line)
// 2. 修复键名引号:将所有 'xxx":' → '"xxx":'
$content = preg_replace('/({|,)\s*([a-zA-Z_][a-zA-Z0-9_]*)":/', '$1"$2":', $content);
// 3. 插入数组结构 + 分隔符:将 '}{' 替换为 '}, {'
$validJson = '[' . str_replace('}{', '}, {', $content) . ']';
// 4. 解析(带错误检查)
$data = json_decode($validJson, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new RuntimeException('JSON 解析失败: ' . json_last_error_msg());
}
// 5. 安全遍历结果
foreach ($data as $item) {
echo "时间: {$item['timestamp']}, 订单ID: {$item['order_id']}\n";
}? 关键说明:
- 使用 file_get_contents() 替代 file() + foreach,因原始文件无换行符,file() 会返回仅含一个元素的数组,反而冗余;
- preg_replace() 精准修复键名引号(比简单 str_replace('timestamp"', '"timestamp"') 更通用,适配任意合法键名);
- str_replace('}{', '}, {') 假设对象间严格以 }{ 相连(无空格),若存在空格或换行,建议先 preg_replace('/}\s*{/', '}, {', $content);
- 务必校验 json_decode() 结果:json_last_error() 是识别预处理失败的唯一可靠方式。
通过结构化预处理 + 原生 JSON 解析,您既能保持代码简洁性,又能获得 PHP JSON 扩展的全部健壮性保障——这才是处理“坏 JSON”的专业之道。
下一篇:辉痕圣林若虫收集全攻略
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9