使用Dataweave 2.0转换CSV结构时如何过滤空值属性
DataWeave 2.0 CSV空值过滤转换方案
需求说明
需要将输入CSV按规则转换:
- 每行以
gaID为前缀,和后续属性用^分隔 - 后续属性格式为
字段名:属性值,多个属性用;分隔 - 空值属性不在输出中展示
输入CSV示例
gaID,gender,age,city,state GA1.3.332,male,20-30,, GA1.3.1041d,female,30-40,Sao Paulo,Sao Paulo GA1.3.1041d,,,Sao Paulo
期望输出示例
GA1.3.332^gender:male;age:20-30 GA1.3.1041d^gender:female;age:30-40;city:Sao Paulo;state:Sao Paulo GA1.3.1041d^state:Sao Paulo
问题原因
原有代码固定生成所有字段的拼接结果,没有做非空判断,导致空值字段仍会输出字段名:的无效内容,且输出格式选择application/csv不符合最终单行文本的输出要求。
修改后代码
%dw 2.0 output text/plain --- payload map ((item) -> item.gaID ++ "^" ++ ( item -- "gaID" filterObject ((value) -> !isEmpty(value)) pluck (($$ as String) ++ ":" ++ $) joinBy ";" ) ) joinBy "\n"
代码说明
- 先移除每条数据中的
gaID字段,避免参与后续属性拼接 - 通过
filterObject过滤所有值为空的字段,空字符串、null都会被过滤 - 把保留的键值对统一转换为
字段名:值的字符串格式 - 多个属性用
;拼接后和gaID用^拼接 - 最终所有行用换行符拼接,直接输出纯文本符合要求
- 无需手动枚举所有字段,后续新增的属性字段也会自动按规则处理,兼容原代码中列的maritalStatus、householdIncome等所有额外字段
内容的提问来源于stack exchange,提问作者Christian Harris
相关产品推荐
相关产品推荐

