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

如何在MuleSoft DataWeave 2.0中提取并清理CSV字段内的JSON负载

解决Mule 4中解析CSV字段内转义JSON并清理HTML的问题

核心问题分析

报错根源是CSV里的errorResponsePayload字段为转义后的JSON字符串(比如用\"转义双引号),直接调用read()解析时,转义字符会导致JSON格式校验失败。同时需要处理HTML标签和换行符,需通过字符串替换完成清理。

分步解决方案与完整脚本

1. 提取并解析multipart中的CSV

先从multipart负载里取出CSV文件内容,转换为字符串后解析成CSV对象数组。

2. 处理转义JSON字段

先移除JSON字符串中的转义符,再解析为JSON对象;加入容错逻辑避免单个字段解析失败导致整个脚本报错。

3. 清理HTML与换行符

用正则表达式匹配并替换所有HTML标签和换行符。

完整DataWeave脚本:

%dw 2.0
output application/json
import * from dw::Runtime
import unescapeJava from dw::core::Strings

// 从multipart中提取CSV内容(假设第一个part是目标CSV)
var csvContent = payload.parts[0].content as String
// 解析CSV为对象数组
var parsedCsv = read(csvContent, "application/csv", {header: true})
---
parsedCsv map (row) -> {
    // 保留CSV中除errorResponsePayload外的所有字段
    (row - "errorResponsePayload"),
    errorResponsePayload: do {
        // 第一步:处理Java风格转义(包括\"、\\n等)
        var unescapedStr = unescapeJava(row.errorResponsePayload)
        // 第二步:清理HTML标签和换行符
        var cleanedStr = unescapedStr replace /<[^>]+>/g with "" replace /\r?\n/g with " "
        // 第三步:解析为JSON,添加容错逻辑
        ---
        try(() -> read(cleanedStr, "application/json")) orElse {
            rawContent: cleanedStr,
            parseError: "JSON解析失败"
        }
    }
}

关键细节说明

  • 转义处理:用unescapeJava()可以一次性处理所有Java风格的转义字符(比如\"转成"、\\n转成\n),比单独替换更通用。
  • HTML清理:正则<[^>]+>匹配所有HTML标签,\r?\n兼容Windows和Unix的换行格式,替换为空格保证文本连贯性。
  • 容错机制:try()包裹解析逻辑,当JSON格式异常时,会返回原始清理后的字符串和错误信息,避免整个流程中断。

输入输出示例

输入CSV片段

requestId,errorResponsePayload
REQ001,"{\"msg\":\"<div>提交失败<br>请检查参数</div>\",\"status\":400}"
REQ002,"{\"msg\":\"系统升级中\\n暂停服务\",\"status\":503}"

输出JSON

[
  {
    "requestId": "REQ001",
    "errorResponsePayload": {
      "msg": "提交失败 请检查参数",
      "status": 400
    }
  },
  {
    "requestId": "REQ002",
    "errorResponsePayload": {
      "msg": "系统升级中 暂停服务",
      "status": 503
    }
  }
]

常见排查点

如果仍出现解析错误,检查:

  • 确认CSV字段的转义规则:如果是CSV标准的双引号转义(用""表示单个"),需在解析CSV时开启escape: "\""配置。
  • 验证payload.parts[0].content是否确实是CSV字符串,必要时添加as String强制转换。
  • 若JSON中包含特殊字符,可在清理阶段额外添加正则处理(比如替换制表符\t)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 06:12:41