解决自动化流中的 JSON 与 HTML 字符冲突

解决自动化流中的 JSON 与 HTML 字符冲突


Backend
JSON WordPress Dify API

冲突原因

在自动化工作流中,把大段 HTML 塞进 JSON Body 发送给 WordPress 等服务器时,经常会触发 400 错误。

原因是 JSON 规定键(Key)和字符串值(Value)必须用双引号 " 包裹。而 HTML 的属性(如 class="card")也使用双引号。当变量直接替换进入 JSON 模板时,HTML 内部的双引号会提前闭合 JSON 的字符串边界,导致结构破碎。

此外,HTML 中的物理换行符在 JSON 字符串中也是非法的,必须转换为 \n

错误示例

如果在 Dify 的 HTTP 节点中手动拼接如下结构:

{
  "title": "测试",
  "content": "{{html_code}}"
}

当 html_code 包含

时,服务器收到的真实数据是:

{
  "title": "测试",
  "content": "<div class="manga-card">"
}

解析器读取到 content 的第二个双引号时认为字符串已结束,后面的 manga-card">" 会被判定为非法语法,导致请求失败。

解决方案:引入序列化节点

不要在 HTTP 节点的界面里手动拼凑 JSON。标准做法是在发送请求前,增加一个 Python 脚本节点,利用 json.dumps() 自动处理转义。

json.dumps() 会执行以下操作:

扫描文本,将内部双引号"转义为\"

将物理换行符转义为 \n

确保输出的字符串完全符合 JSON 规范。

Python 节点代码实现

import json

def main(html_code: str) -> dict:
    # 1. 简单处理 HTML 首尾换行
    safe_html = "\n" + html_code + "\n"
    
    # 2. 构建 Python 字典,此时无需担心引号冲突
    payload = {
        "title": "自动化发布测试",
        "content": safe_html,
        "status": "draft",
        "categories": [1]
    }

    # 3. 序列化为安全字符串,关闭 ASCII 强制转换以保留中文
    final_json = json.dumps(payload, ensure_ascii=False)
    
    return {
        "safe_json_body": final_json
    }

标准操作流程 (SOP) 处理大段复杂文本或代码的 HTTP 发送任务时,应遵循以下链路:

  1. 废弃可视化组装:停止在 HTTP 节点的 JSON 框里直接引用变量。
  2. 加入打包节点:在请求前置位增加 Python 代码节点。
  3. 字典序列化:在代码里构建 Dict,通过 json.dumps 输出最终字符串。
  4. 发送 Raw Data:在 HTTP 节点的 Body 设置中选择 raw,直接填入上一步生成的字符串变量。Header 保持 Content-Type: application/json

通过这种方式,发送给服务器的数据将呈现为标准形态: "content": "\n<div class=\"manga-card\">\n..." 服务器会正确识别 ” 为普通字符,从而保证链路的稳定性。

© 2026 Personal Website
Developed by Ryan 🫡