将 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,请注意它不会那样做。
我有这个输出,我正在尝试更改 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,请注意它不会那样做。