将 CSV 对象写入数组 Mulesoft

Write to CSV obejct to array Mulesoft

我有这个输出,我正在尝试更改 YYYY-MM-DD 的数据格式,我想使用组件文件 WRITE 将这个 object 写入 CSV。

%dw 2.0
output application/json
---
{
    "id": "15",
    "key": "DEMO-123",
    "first": {
        "date": "2022-02-08T14:40:35.935+0100" as
         DateTime {format: "yyyy-MM-dd'T'HH:mm:ss.sssxx"} as String {format: "yyyy-MM-dd"},
        "demotype": {
            "firstname": "Task",
            "opinion": "demo input"
        },
        "demo": {
            "name": "Tree"
        },
        "start": "2022-02-08T07:23:53.054+0100",
        "end": "2022-02-08T14:40:35.935+0100",
        "status": {
            "name": "good"
        }
       "demo2": [
            {
                "kiss": [
                    "demo1"
                ]
            }
}

我正在尝试像这样制作地图:

<ee:transform doc:name="Transform Message">
            <ee:message>
                <ee:set-payload><![CDATA[%dw 2.0
output application/csv quoteValues=true, separator=";", header=true

---
flatten (
    [
        "id": "id",
        "key": "key"
    ]
)]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <file:write doc:name="Write" config-ref="File_Config" path="F:user/demo.csv"/>

但我只得到了 In CSV headers id 和 key 而没有值。 但是,如果我尝试使用地图,则会出现错误,我需要将此 object 转换为数组以将其写入 CSV。

您为转换为 CSV 而生成 'input' 的第一个脚本无效,并且日期时间模式无效。我修好了它。我还将输出设置为 application/java 以便在下一次转换中更有效率:

%dw 2.0
output application/java
---
{
    "id": "15",
    "key": "DEMO-123",
    "first": {
        "date": "2022-02-08T14:40:35.935+0100" as
         DateTime {format: "yyyy-MM-dd'T'HH:mm:ss.SSSxx"} as String {format: "yyyy-MM-dd"},
        "demotype": {
            "firstname": "Task",
            "opinion": "demo input"
        },
        "demo": {
            "name": "Tree"
        },
        "start": "2022-02-08T07:23:53.054+0100",
        "end": "2022-02-08T14:40:35.935+0100",
        "status": {
            "name": "good"
        },
       "demo2": [
            {
                "kiss": [
                    "demo1"
                ]
            }
       ]
    }
}

要生成 CSV 输出,输入必须是一个对象数组,其中每个对象代表一条记录或 CSV 的一行。由于您输入的显然是单个对象,因此您可以将转换包含在数组括号之间以输出单个项目数组。您可以使用以下示例作为基础来完成您想要的转换。请注意,demo2 包含一个数组,其中包含一个带有另一个数组的对象。您不能只将其输出到 CSV 字段。如果您想这样做,请先将其转换为字符串。例如,如果需要,您可以使用 reduce() 函数。

%dw 2.0
output application/csv quoteValues=true, separator=";", header=true
---
[
    {
        id: payload.id,
        key: payload.key,
        date: payload.first.date,
        start: payload.first.start
    }
]

输出:

id;key;date;start
"15";"DEMO-123";"2022-02-08";"2022-02-08T07:23:53.054+0100"

请注意,flatten() 不会在简单数组中执行任何操作。如果您尝试将它用于 'flat' 嵌套 object/array,请注意它不会那样做。