【问题标题】:Transform list of objects into csv using dataweave使用 dataweave 将对象列表转换为 csv
【发布时间】:2015-11-19 02:11:56
【问题描述】:

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

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

【问题讨论】:

    标签: mule dataweave


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      以下对我有用:

      输入:

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

      映射:

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

      输出:

      name,address
      nameInput,addressInput
      

      【讨论】:

      • 谢谢 :) 尽管它有效,但它不是我想要的。我想在映射中指定我想要的字段。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        对我来说,类似于@Tilo 在他的post 中所描述的,但我必须添加额外的“flatten”,因为我输入了 Array of Arrays。

        映射:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-03-04
          • 2019-06-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-19
          • 2016-09-19
          相关资源
          最近更新 更多