2

我正在尝试使用 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

4 回答 4

5

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

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

映射应该类似于:

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

此处的操作为列表中的每个条目map生成一个带有name和的对象。表示迭代下的隐式变量(每个列表条目)。address$

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

于 2015-08-25T14:50:38.280 回答
1

以下对我有用:

输入:

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

映射:

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

输出:

name,address
nameInput,addressInput
于 2015-08-25T12:51:20.117 回答
0

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

<splitter evaluator="xpath" expression="/document/article"/>
于 2018-01-10T15:04:30.460 回答
0

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

映射:

%dw 1.0
%output application/csv
---
flatten payload
于 2020-01-08T09:03:02.933 回答