From 7b51a1bcf743e725aa4696aa01e0ebaf5731c7b5 Mon Sep 17 00:00:00 2001 From: panchengyong Date: Mon, 9 Mar 2026 14:37:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20parseWorkflowRespon?= =?UTF-8?q?se=20=E5=A4=84=E7=90=86=E5=8C=85=E5=90=AB=E9=A2=9D=E5=A4=96?= =?UTF-8?q?=E6=96=87=E6=9C=AC=E7=9A=84=20JSON=20=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Coze 工作流返回的 output 字段包含: 1. 双编码的 JSON 字符串 2. JSON 对象后面跟着额外的注释/说明文本 修复方案: - 从字符串中提取 JSON 对象部分(从 { 开始到 } 结束) - 仅解析 JSON 部分,忽略后面的注释文本 Co-Authored-By: Claude Opus 4.6 --- .../impl/tool/ToolCommunityServiceImpl.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/msh_crmeb_22/crmeb-service/src/main/java/com/zbkj/service/service/impl/tool/ToolCommunityServiceImpl.java b/msh_crmeb_22/crmeb-service/src/main/java/com/zbkj/service/service/impl/tool/ToolCommunityServiceImpl.java index ee392fd..cfc4c57 100644 --- a/msh_crmeb_22/crmeb-service/src/main/java/com/zbkj/service/service/impl/tool/ToolCommunityServiceImpl.java +++ b/msh_crmeb_22/crmeb-service/src/main/java/com/zbkj/service/service/impl/tool/ToolCommunityServiceImpl.java @@ -720,18 +720,28 @@ public class ToolCommunityServiceImpl implements ToolCommunityService { if (dataMap == null) return null; - // 处理 Coze 工作流返回的 output 字段(可能是双编码的 JSON 字符串) + // 处理 Coze 工作流返回的 output 字段(可能是双编码的 JSON 字符串,可能包含额外的文本) Object outputField = dataMap.get("output"); if (outputField != null) { try { - // 第一次解析:从字符串去掉外层引号(因为 output 本身是 JSON 字符串) String outputStr = outputField instanceof String ? (String) outputField : outputField.toString(); - // 第二次解析:解析内部的 JSON 对象 - Map output = JSON.parseObject(outputStr, Map.class); - result.put("output", output); + // 提取 JSON 对象部分(从 { 开始到 } 结束) + int jsonStart = outputStr.indexOf('{'); + int jsonEnd = outputStr.lastIndexOf('}'); + + if (jsonStart >= 0 && jsonEnd > jsonStart) { + String jsonPart = outputStr.substring(jsonStart, jsonEnd + 1); + // 解析 JSON 对象 + Map output = JSON.parseObject(jsonPart, Map.class); + result.put("output", output); + } else { + // 如果找不到有效的 JSON,尝试直接解析 + Map output = JSON.parseObject(outputStr, Map.class); + result.put("output", output); + } } catch (Exception e) { log.warn("Failed to parse workflow output field: {}", e.getMessage()); result.put("output", outputField);