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

如何用DataWeave将嵌套JSON转换为无转义符的CSV格式

嵌套JSON转扁平化CSV的正确实现

输入JSON结构

[{
  "ID": "123456",
  "accountNumber": "876545",
  "contractType": "ABCD",
  "linedata": 
    {
      "productSKU": "1234",
      "data": {
        "Line_Number": 1726428,
        "Reservation_Number": "1726428",
        "Quantity": 1,
        "UnitPrice": 16
      }
    }
  },
  {
  "ID": "345678",
  "accountNumber": "445566",
  "contractType": "ABCD",
  "linedata": 
    {
      "productSKU": "2345",
      "data": {
        "Line_Number": 3213445565,
        "Reservation_Number": "123456789",
        "Quantity": 1,
        "UnitPrice": 25
      }
    }
  }]

目标CSV格式

Data, ID, AccountNumber, Contract_Type
{"productSKU":"1234","data":{"Line_Number":1726428, "Reservation_Number":"1726428", "Quantity":1,  "UnitPrice":16}}, 123456, 876545, ABCD
{"productSKU":"2345","data":{"Line_Number":3213445565,"Reservation_Number":"123456789","Quantity":1,"UnitPrice":25}}, 345678, 445566, ABCD

遇到的问题

  • 用write(item.linedata, "application/json")将linedata转为JSON字符串时,输出会多出不必要的反斜杠,导致Data字段内容不符合预期。
  • 手动拼接字符串移除反斜杠后,CSV解析器会把Data字段内的逗号当成列分隔符,直接拆成多列,同时字段内的双引号未正确转义,导致整个CSV格式混乱。

正确的DataWeave代码实现

%dw 2.0
output application/csv header=true quoteValues=true escape="\""
---
inputJSON map ((item) -> {
    Data: write(item.linedata, "application/json") replace /\\/ with "",
    ID: item.ID,
    AccountNumber: item.accountNumber,
    Contract_Type: item.contractType
})

代码说明

  • output application/csv header=true:直接指定输出为CSV格式并自动生成表头,无需先转JSON再二次处理。
  • quoteValues=true:让CSV自动为包含逗号、双引号的字段添加外层引号,避免Data字段内的逗号被误判为列分隔符。
  • escape="\"":按照CSV标准规则,将字段内部的双引号转义为两个连续双引号,保证解析时不会出现格式错误。
  • replace /\\/ with "":移除write函数生成的JSON字符串中的反斜杠,得到干净的原生JSON内容。

最终输出的合规CSV

Data,ID,AccountNumber,Contract_Type
"{`"productSKU`":`"1234`",`"data`":{`"Line_Number`":1726428,`"Reservation_Number`":`"1726428`",`"Quantity`":1,`"UnitPrice`":16}}","123456","876545","ABCD"
"{`"productSKU`":`"2345`",`"data`":{`"Line_Number`":3213445565,`"Reservation_Number`":`"123456789`",`"Quantity`":1,`"UnitPrice`":25}}","345678","445566","ABCD"

(注:实际输出中内部双引号会被转义为两个连续双引号,符合CSV规范,解析工具可正确识别为单个完整的JSON字符串字段)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:57:33