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

如何在DataWeave 2.0的map中使用try函数处理CSV转换异常

处理CSV转JSON时的分组转换异常捕获方案

处理CSV转JSON时,需按订单号分组合并多行数据,但当某行字段为空或null时,整个转换流程会中断。需求是通过try函数捕获异常,将转换失败的订单单独存入错误区域,正常订单继续完成转换,不中断整体流程。

演示CSV片段

number,date,upc,quantity,price
1234556,2022-08-04,4015,1,
1234556,2022-08-04,4019,1,2.00
1234556,2022-08-04,4016,1,3.00
1234557,2022-08-04,4015,1,3.00

当前DataWeave代码

%dw 2.0
output application/json
---
payload groupBy ($.number) pluck $ map ( () -> {
   "number": $[0].number,
   "date": $[0].date,
   "items": $ map {
       "upc": $.upc,
       "price": $.price as Number {format: "##,###.##"} as String {format: "##,###.00"},
       "quantity": $.quantity
    }
 })

错误信息

Unable to coerce `` as Number using `##,###.##` as format.

注:实际场景中CSV字段众多,无法逐一校验字段有效性,需借助try函数实现异常隔离处理。

解决方案代码

%dw 2.0
output application/json
---
do {
    // 按订单号分组所有订单行
    var groupedOrders = payload groupBy $.number
    // 处理每个订单分组,捕获转换异常
    var processedResults = groupedOrders pluck ((orderLines, orderNumber) -> 
        try(() -> {
            "type": "success",
            "content": {
                "number": orderNumber,
                "date": orderLines[0].date,
                "items": orderLines map {
                    "upc": $.upc,
                    "price": $.price as Number {format: "##,###.##"} as String {format: "##,###.00"},
                    "quantity": $.quantity
                }
            }
        }) match {
            case Success(result) -> result
            case Failure(error) -> {
                "type": "error",
                "content": {
                    "number": orderNumber,
                    "message": error.error.message
                }
            }
        }
    )
    // 拆分成功与失败数据,组装目标结构
    {
        "data": processedResults filter ($.type == "success") map $.content,
        "Error": processedResults filter ($.type == "error") map $.content
    }
}

代码说明

  • 用do块封装变量,提升代码可读性和逻辑模块化
  • 对每个订单分组的转换逻辑用try包裹,捕获字段转换时的异常
  • 通过match分支处理Success和Failure结果,分别标记数据类型
  • 最后过滤并拆分成功/失败数据,组装成符合需求的输出结构

期望输出结果

{
  "data": [
    {
      "number": "1234557",
      "date": "2022-08-04",
      "items": [
        {
          "upc": "4015",
          "price": "3.00",
          "quantity": "1"
        }
      ]
    }
  ],
  "Error": [
    {
      "number": "1234556",
      "message": "Unable to coerce `` as Number using `##,###.##` as format."
    }
  ]
}

内容的提问来源于stack exchange,提问作者Jesus Abraham Felix González

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:50:39