【问题标题】:dataweave 2.0 csv transformattiondataweave 2.0 csv 转换
【发布时间】:2020-12-11 21:16:51
【问题描述】:

获取下面的csv文件作为输入

Id|Name|ParentId
001|National|AREG-001
0013|Texas|AREG-001
0012|Tennessee|AREG-001
0006|Indiana|AREG-001

我想输出为

('001','National','AREG-001'),
('0013','Texas','AREG-001'),
('0012','Tennessee','AREG-001'),
('0006','Indiana','AREG-001')

运行时:4.2.1

如何转换。

【问题讨论】:

    标签: csv dataweave mulesoft


    【解决方案1】:

    这是一种快速简单的解决方法。

    output text/plain
    ---
    "('" ++ 
    (
      payload map ((value, index) -> 
        dw::core::Objects::valueSet(value) joinBy  "','"
      ) joinBy "'),\n('"
    ) 
    ++ "')"
    

    不要忘记设置 CSV 阅读器参数 separator="|",以便正确解释输入。

    从 Mule 4.3 起,您可以使用 valuesOf 代替 dw::core::Objects::valueSet

    【讨论】:

    • 'valuesOf' 在 DataWeave 2.3.0 中引入。 Mule 4.3 及更高版本支持,但目前我使用的是 Runtime 4.2.1
    • 上述转换有效。我想为每个字符串添加“INSERT INTO”字符串,看起来像INSERT INTO ('ASC-AREG-001','Ascension National',''); INSERT INTO ('','Ascension Texas','ASC-AREG-001'); INSERT INTO ('ASC-MMKT-0012','','ASC-AREG-001'); INSERT INTO ('ASC-MMKT-0006','Ascension Indiana','ASC-AREG-001');
    • 以上问题的转换:output text/plain var data='insert into' --- "('" ++ ( payload map ((value, index) -> dw::core::Objects::valueSet(value) joinBy "','" ) joinBy "');\n ('" ) ++ "')" replace "('" with (data ++ "('")
    【解决方案2】:

    使用 reduce() 并显式连接每个字段的另一种方法:

    %dw 2.0
    output text/plain
    ---
    payload  reduce ((item, acc = "") -> acc ++ "('" ++ item.Id ++ "','" ++ item.Name ++ "','" ++ item.ParentId ++ "')\n")]]></ee:set-payload>
    

    在任何情况下,这是连接字符串,因此您应该注意,如果记录数很高,您可能会耗尽内存。

    【讨论】:

    • 在转换You called the function '++' with these arguments: 1: String ("('") 2: Null (null) But it expects one of these combinations: (Array, Array) (Date, Time) 4| payload reduce ((item, acc = "") -&gt; acc ++ "('" ++ item.Id ++ "','" ++ item.Name ++ "','" ++ item.ParentId ++ "')\n") Trace: at main::++ (line: 4, column: 109) at main::++ (line: 4, column: 42)时遇到以下问题
    • 看起来负载没有被解析为 CSV。您是否为它设置了正确的 mime 类型?
    • 添加流: acc ++ "('" ++ item.Id ++ "','" ++ item.Name ++ "', '" ++ item.ParentId ++ "')\n")]]>
    • 很难在评论中阅读流程,但看起来 mime 类型中缺少 header 指令。否则 DataWeave 无法将字段名称与 CSV 中的标头匹配,然后 item.Id 等返回 null,这似乎是错误中提到的内容。尝试将其更改为outputMimeType="application/csv;separator='|'; header=true"
    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2019-12-28
    • 2023-03-19
    • 1970-01-01
    • 2017-12-23
    相关资源
    最近更新 更多