使用dataweave将对象列表转换为csv

时间:2015-08-25 11:32:18

标签: mule 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

帮助我了解数据编织组件中缺少的内容

4 个答案:

答案 0 :(得分:5)

一般而言,使用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不存在。

答案 1 :(得分:1)

以下适用于我:

<强> INPUT:

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

<强>映射:

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

<强>输出:

name,address
nameInput,addressInput

答案 2 :(得分:0)

使用xpath作为求值程序的拆分器应该可以做到这一点......比如:

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

答案 3 :(得分:0)

对我来说,就像@Tilo在他的post中所描述的一样,但是我不得不加上多余的 flatten ”,因为我将“数组数组”作为输入。

映射:

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