Mule 将嵌套json数组映射到CSV

Mule 将嵌套json数组映射到CSV,mule,dataweave,Mule,Dataweave,我试图在Dataweave中将一个数组有效负载映射到CSV中,但无法实现结果 csv不需要标题,数组中的内容将逐列打印。我面临通过嵌套数组进行映射的问题 输入有效载荷 预期产量 我如何编写dataweave映射来归档上述结果 这是我为您的用例找到的解决方案。基本上有两个函数可以根据类型在正确的方法上进行调度。然后,您还需要使用函数将一个发票行与一个发票税行混合,以便正确混合 %dw 2.0 output application/csv headers=false import * from d

我试图在Dataweave中将一个数组有效负载映射到CSV中,但无法实现结果

csv不需要标题,数组中的内容将逐列打印。我面临通过嵌套数组进行映射的问题

输入有效载荷

预期产量


我如何编写dataweave映射来归档上述结果

这是我为您的用例找到的解决方案。基本上有两个函数可以根据类型在正确的方法上进行调度。然后,您还需要使用函数将一个发票行与一个发票税行混合,以便正确混合

%dw 2.0
output application/csv headers=false 
import * from dw::core::Objects

fun collectKeyNames(obj: {}): Array<{}> = 
            [
                obj
            ]

fun collectKeyNames(arr: Array): Array<{}> = 
    arr flatMap ((obj, index) ->  collectKeyNames(obj))

---
payload flatMap ((item, index) -> 
    collectKeyNames(item.Invoice) ++ 
        (collectKeyNames(item."Invoice Line" zip item."Invoice Tax Line"))
)

这是我为您的用例找到的解决方案。基本上有两个函数可以根据类型在正确的方法上进行调度。然后,您还需要使用函数将一个发票行与一个发票税行混合,以便正确混合

%dw 2.0
output application/csv headers=false 
import * from dw::core::Objects

fun collectKeyNames(obj: {}): Array<{}> = 
            [
                obj
            ]

fun collectKeyNames(arr: Array): Array<{}> = 
    arr flatMap ((obj, index) ->  collectKeyNames(obj))

---
payload flatMap ((item, index) -> 
    collectKeyNames(item.Invoice) ++ 
        (collectKeyNames(item."Invoice Line" zip item."Invoice Tax Line"))
)

谢谢@machaval!这是我想要的工作。但是,您能否提供更多关于collectKeyNames函数工作原理的解释?因为我实际上计划做一些修改来指定每个对象的列,所以基本上你有一个对象数组或者只是一个对象数组,所以我所做的是用两个选项覆盖函数,要么是数组,要么是对象。如果它是一个对象,只需收集该对象,如果它是一个数组,则收集其中的所有对象并将其展平。我利用了动态调度。谢谢@machaval!这是我想要的工作。但是,您能否提供更多关于collectKeyNames函数工作原理的解释?因为我实际上计划做一些修改来指定每个对象的列,所以基本上你有一个对象数组或者只是一个对象数组,所以我所做的是用两个选项覆盖函数,要么是数组,要么是对象。如果它是一个对象,只需收集该对象,如果它是一个数组,则收集其中的所有对象并将其展平。我利用了动态调度。
%dw 2.0
output application/csv headers=false 
import * from dw::core::Objects

fun collectKeyNames(obj: {}): Array<{}> = 
            [
                obj
            ]

fun collectKeyNames(arr: Array): Array<{}> = 
    arr flatMap ((obj, index) ->  collectKeyNames(obj))

---
payload flatMap ((item, index) -> 
    collectKeyNames(item.Invoice) ++ 
        (collectKeyNames(item."Invoice Line" zip item."Invoice Tax Line"))
)