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

PHP解析嵌套格式错误的JSON中messages字段内容求助

解决PHP解析格式错误JSON消息的方案

步骤1:解析外层JSON,获取格式错误的messages字符串

先正常解码外层JSON,取出里面的messages字段值,这个值是格式有问题的JSON片段:

// 假设外层JSON内容已读取到$outerJson变量
$outerData = json_decode($outerJson, true);
if (!isset($outerData['messages'])) {
    die('外层JSON中无messages字段');
}
$brokenMessagesStr = $outerData['messages'];

步骤2:修复格式错误的消息字符串

因为消息对象之间仅用换行分隔,没有逗号且缺少数组包裹,通过正则处理补全格式:

// 匹配对象结束符+任意空白+对象开始符,替换为对象分隔逗号,再包裹成数组
$fixedMessagesStr = '[' . preg_replace('/}\s*{/', '},{', trim($brokenMessagesStr)) . ']';

这个正则会自动处理换行、空格等空白字符,给独立的JSON对象之间补上逗号,再用[]包裹成合法的JSON数组。

步骤3:解码修复后的JSON,提取所需字段

现在可以正常解码修复后的字符串,遍历提取role和content:

$messages = json_decode($fixedMessagesStr, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    die('修复后的JSON仍无法解码:' . json_last_error_msg());
}

// 遍历输出每组消息的角色和内容
foreach ($messages as $msg) {
    if (isset($msg['role'], $msg['content'])) {
        echo '角色:' . $msg['role'] . ',内容:' . $msg['content'] . PHP_EOL;
    }
}

特殊情况处理

如果原始错误字符串存在引号未转义、多余空白等问题,可以先执行以下预处理:

// 统一替换换行为空格,清理首尾空白
$brokenMessagesStr = trim(preg_replace('/\r\n|\r|\n/', ' ', $brokenMessagesStr));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:12:05