[英]Extract the inner field objects and apply them to respective top level objects using Dataweave2.0
我正在尝试从给定的输入中获得以下 output。 我已经尝试了几种制作通用 function 的方法,这样当任何数据以类似的结构传递时,我都会得到类似的 output。请帮助我实现这一目标。
输入
[{
"name": "Thinker",
"details": [
{
"num": 1
},
{
"num": 2
}
]
},
{
"name": "Blinker",
"details": [
{
"num": 3
},
{
"num": 4
}
]
}]
Output
[{
"name": "Thinker",
"num": 1
},
{
"name": "Thinker",
"num": 2
},
{
"name": "Blinker",
"num": 3
},
{
"name": "Blinker",
"num": 4
}]
关键是通过外部和内部 arrays 进行映射,然后展平结果:
output application/json
---
flatten (payload map ((item, index) -> item.details map ((detail, index) -> {
name: item.name,
num: detail.num
})))
正如 Aled 在对其中一个答案的评论中提到的那样,这可能是解决此问题的另一种方法。
%dw 2.0
output application/json
---
payload flatMap (item,index) -> (
item.details map {
name: item.name,
num: $.num
}
)
试试这个 DW
主阵列上的第一个 Map 到 Map
第二 Map 至 Map 详情
reduce 将嵌套数组转换为单个数组
%dw 2.0
output application/json
---
payload map(
($.details map(item,index)->{
"name":($.name),
"num":item[0]
})
)reduce($$++$)
Output
[
{
"name": "Thinker",
"num": 1
},
{
"name": "Thinker",
"num": 2
},
{
"name": "Blinker",
"num": 3
},
{
"name": "Blinker",
"num": 4
}
]
数据中心
%dw 2.0
output application/json
---
payload map(
($.details map(item,index)->{
(keysOf($)[0]):($.name),
(keysOf(item)[0]):item[0]
})
)reduce($$++$)
如果您的请求结构将始终保持这种方式(无论字段名称如何),那么您可以尝试如下脚本,它更通用并且可以在相同类型的结构上工作
%dw 2.0
output application/json
---
payload flatMap ((item, index) ->
(item filterObject ($ is Array))[0] map
($ ++ (item filterObject ($ is String | Number | Null)) )
)
注意:它始终可以在这种类型的结构上工作并且不依赖于字段名称,并给出预期的 output
[{
"anyname": "xyz",
"anydetails": [
{
"abc": 1
},
{
"ijk": 2
}
]
}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.