使用数据编织将对象列表转换为 csv

Transform list of objects into csv using dataweave

我正在尝试使用 dataweave 中的以下代码将对象列表转换为 csv:

%dw 1.0
%type company = :object {class: "java.util.ArrayList"}
%input payload application/java
%output application/csv
---
{
    name: payload.name,
    address: payload.address
} as :company 

下面是我执行上面的数据编织代码时得到的输出。

name,name
testName,testName2
testAddress,testAddress2

虽然我期待以下内容:(示例数据)

name,address
testName,testAddress
testName2,testAddress2

帮助我了解我在数据编织组件中缺少什么

以下对我有用:

输入:

%dw 1.0
%output application/java
---
[{
    name: "nameInput",
    address: "addressInput"
}]

映射:

%dw 1.0 %output application/csv
---
payload

输出:

name,address
nameInput,addressInput

一般而言,使用 DataWeave 时,您使用规范表示来描述输出,规范表示或多或少是其他数据格式的超集。

要生成 CSV 输出,您需要生成一个对象数组。
这些对象中的每一个都代表一个 CSV 行。
DataWeave 中的对象是一组键值对

映射应该是这样的:

%dw 1.0
%output application/csv
---
payload map {
    name: $.name,
    address: $.address
}

这里的 map 操作为列表中的每个条目生成一个带有 nameaddress 的对象。 $表示迭代中的隐式变量(每个列表条目)。

注意:%input payload application/java 指令不是必需的,因为您输入的内容类型(JSON、XML、CSV 等)是从 mule 消息中获取的已设置,如果不存在则默认为 java。

使用 xpath 作为评估器的拆分器应该可以解决问题...例如:

<splitter evaluator="xpath" expression="/document/article"/>

对我来说,与@Tilo 在他的 中描述的类似,但我不得不添加额外的“flatten”,因为我有 Array of Arrays 作为我的输入。

映射:

%dw 1.0
%output application/csv
---
flatten payload