如何在n8n中将LLM返回的文本结果解析为JSON?
在n8n中解析LLM返回的JSON格式文本
问题分析
LLM返回的内容包含Markdown代码块标记(```json和```),直接使用字符串替换后调用JSON.parse返回undefined,大概率是替换不彻底或残留了干扰解析的空白字符,也可能是表达式中转义写法错误导致替换失效。
解决方案
方案1:修正字符串替换逻辑并清理空白
调整表达式,去掉不必要的反引号转义,同时添加trim()清除前后空白:
{{ JSON.parse($json["message"]["content"].replace("```json", "").replace("```", "").trim()) }}
方案2:用正则精准匹配移除代码块标记
正则能更灵活处理代码块前后的换行、空格,确保只保留中间的JSON内容:
{{ JSON.parse($json["message"]["content"].replace(/^```json\s*([\s\S]*?)\s*```$/, '$1')) }}
^```json\s*:匹配开头的```json及后续任意空白/换行([\s\S]*?):非贪婪匹配中间所有内容(含换行)并捕获\s*```$:匹配结尾的```及前面任意空白/换行$1:用捕获的纯净JSON内容替换整个字符串
方案3:使用n8n内置节点分步处理
如果表达式解析存在问题,可拆分步骤操作:
- 添加Set节点:新建字段(如
cleanedJson),设置值为:{{ $json["message"]["content"].replace(/^```json\s*/, '').replace(/\s*```$/, '').trim() }} - 添加JSON节点:在节点的「Input」选项中选择
cleanedJson字段,节点会自动将字符串解析为JSON对象。
内容的提问来源于stack exchange,提问作者Gulzar
相关产品推荐
相关产品推荐

