Mulesoft将多个JSON/XML转换为CSV

Mulesoft将多个JSON/XML转换为CSV,mule,dataweave,mulesoft,Mule,Dataweave,Mulesoft,我对在Mulesoft中将JSON转换为CSV完全是新手。目前我需要将嵌套的JSON转换成CSV,我的CSV应该是这样的,我的JSON应该是这样的 { "Invoice": [ { "Invoice Number*": "", "Supplier Name": "", "Supplier Number": "", "Status": "", "Invoice Date*": "" } ], "Invoice

我对在Mulesoft中将JSON转换为CSV完全是新手。目前我需要将嵌套的JSON转换成CSV,我的CSV应该是这样的,我的JSON应该是这样的

{
  "Invoice": [
    {
      "Invoice Number*": "",
      "Supplier Name": "",
      "Supplier Number": "",
      "Status": "",
      "Invoice Date*": ""
    }
  ],
  "Invoice Line": [
    {
      "Invoice Number*": "",
      "Supplier Name": "",
      "Supplier Number": "",
      "Line Number": "",
      "Description*": "",
      "Supplier Part Number": "",
      "Auxiliary Part Number": "",
      "Price*": "",
      "Quantity": "",
      "Bulk Price": "",
      "Bulk Price Qty": ""
    }
  ],
  "Invoice Tax Line": [
    {
      "Invoice Number*": "",
      "Invoice Line Number": "",
      "Invoice Charge Number": "",
      "Line Number": "",
      "Tax Amount": "",
      "Tax Rate": "",
      "Tax Code": "",
      "Tax Rate Type": ""
    }
  ]
}

我所知道的CSV只有一个标题。对于我来说,将这个复杂的JSON映射到CSV(将显示不同的标题)的最佳方式是什么?

您可以这样做:

%dw 2.0
output application/csv header=false
---
flatten (
    [
        {"Invoice Number":"Invoice Number",
            "Supplier Name": "Supplier Name",
            "Supplier Number" :"Supplier Number",
            "Status" : "Status",
            "Invoice Date*" : "Invoice Date*"
        },
        {
            "Invoice Number":"Invoice Number*",
            "Supplier Name":"Supplier Name",
            "Supplier Number":"Supplier Number",
            "Status":"Status",
            "Invoice Date*":"Invoice Date*"
        },
        payload.Invoice map {
            "Invoice Number":$."Invoice Number*",
            "Supplier Name":$."Supplier Name",
            "Supplier Number":$."Supplier Number",
            "Status":$.Status,
            "Invoice Date*":$."Invoice Date*"
        }, 
        payload."Invoice Line" map {
            "Invoice Number": $."Invoice Number*",
            "Supplier Name":$."Supplier Name",
            ...
        } 
        , 
        payload."Invoice Tax Line" map {
            "Invoice Number":$."Invoice Number*",
            ...
        } 
    ]
)

您可以这样做:

%dw 2.0
output application/csv header=false
---
flatten (
    [
        {"Invoice Number":"Invoice Number",
            "Supplier Name": "Supplier Name",
            "Supplier Number" :"Supplier Number",
            "Status" : "Status",
            "Invoice Date*" : "Invoice Date*"
        },
        {
            "Invoice Number":"Invoice Number*",
            "Supplier Name":"Supplier Name",
            "Supplier Number":"Supplier Number",
            "Status":"Status",
            "Invoice Date*":"Invoice Date*"
        },
        payload.Invoice map {
            "Invoice Number":$."Invoice Number*",
            "Supplier Name":$."Supplier Name",
            "Supplier Number":$."Supplier Number",
            "Status":$.Status,
            "Invoice Date*":$."Invoice Date*"
        }, 
        payload."Invoice Line" map {
            "Invoice Number": $."Invoice Number*",
            "Supplier Name":$."Supplier Name",
            ...
        } 
        , 
        payload."Invoice Tax Line" map {
            "Invoice Number":$."Invoice Number*",
            ...
        } 
    ]
)

CSV视图图像CSV视图图像HI@aled,感谢您的回答!你能稍微解释一下这段代码中发生了什么吗?DataWeave中的CSV支持意味着有一个可选的标题行和具有相同结构的其余行。我有点滥用它,用手工创建每一行。对于DataWeave,没有标题。因为项目是一个数组,它的映射可以生成一个对象数组,所以我们需要使用flatte()函数输出一个数组,每个对象代表一行输出。您好@aled,谢谢您的回答!你能稍微解释一下这段代码中发生了什么吗?DataWeave中的CSV支持意味着有一个可选的标题行和具有相同结构的其余行。我有点滥用它,用手工创建每一行。对于DataWeave,没有标题。因为项目是一个数组,它的映射可以生成一个对象数组,所以我们需要使用flatte()函数输出一个数组,每个对象代表一行输出。