使用数据编织将对象列表转换为 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
操作为列表中的每个条目生成一个带有 name
和 address
的对象。 $
表示迭代中的隐式变量(每个列表条目)。
注意:%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
我正在尝试使用 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
操作为列表中的每个条目生成一个带有 name
和 address
的对象。 $
表示迭代中的隐式变量(每个列表条目)。
注意:%input payload application/java
指令不是必需的,因为您输入的内容类型(JSON、XML、CSV 等)是从 mule 消息中获取的已设置,如果不存在则默认为 java。
使用 xpath 作为评估器的拆分器应该可以解决问题...例如:
<splitter evaluator="xpath" expression="/document/article"/>
对我来说,与@Tilo 在他的
映射:
%dw 1.0
%output application/csv
---
flatten payload