dataweave - Mule 4/DW 2.0:在数组对象内迭代数组
问题描述
这是示例输入 JSON:*
[
{
"animation_production_studios": [],
"audio": [
"English",
"Japanese"
],
"videos": [
{
"DASH": true,
"aips": [
400,
824,
1191
],
},
{
"DASH": true,
"aips": [
401,
825,
1192
],
}
]
]
},
{
"animation_production_studios": ["Studio Chizu"],
"audio": [
"English",
"Japanese"
],
"videos": [
{
"DASH": true,
"aips": [
403,
826,
1193
],
},
{
"DASH": true,
"aips": [
404,
827,
1194
],
}
]
]
}
]
*
这是预期的输出(能够插入到数据库中,如下所示):
animation_production_studios audio videos_dash videos_aips
------------------------------------------------------------------------------------
Null English, Japanese true 400, 824, 1191
Null English, Japanese true 401, 825, 1192
Studio Chizu English, Japanese true 402, 826, 1193
Studio Chizu English, Japanese true 403, 827, 1194
这是我试过的 DW%2.0 代码:
payload map(item, index) -> {
(item.videos map(viditem, vidindex)) -> {
videos_aips: (viditem.videos map ((vitem, vindex) ->
vitem.aips reduce ((vi, vacc) -> vacc + vi )))[0],
show_id: item."show_id",
audio: (payload map ((aitem, aindex) -> item.audio
reduce ((i, acc) -> acc ++ "," ++ i )))[0]
}
}
抛出错误:
(item.videos map(viditem, vidindex)) -> {
^
Invalid input ',', expected ')' for the enclosed expression.
解决方案
请看下面
%dw 2.0
output application/json
var inputData = read('{
"data": [
{
"animation_production_studios": [],
"audio": [
"English",
"Japanese"
],
"videos": [
{
"DASH": true,
"aips": [
400,
824,
1191
]
},
{
"DASH": true,
"aips": [
401,
825,
1192
]
}
]
},
{
"animation_production_studios": [
"Studio Chizu"
],
"audio": [
"English",
"Japanese"
],
"videos": [
{
"DASH": true,
"aips": [
403,
826,
1193
]
},
{
"DASH": true,
"aips": [
404,
827,
1194
]
}
]
}
]
}', 'application/json')
fun concatArray(objArray=[], separator=",") =
if (sizeOf(objArray) == 0)
"Null"
else
objArray joinBy separator
---
flatten(inputData.data map(item) ->
item.videos map (vidItem) -> {
"animation_production_studios" : concatArray(item.animation_production_studios, ","),
"audio" : concatArray(item.audio, ","),
"videos_aips" : concatArray(vidItem.aips, ","),
"videos_dash" : vidItem.DASH
})
这将导致:
[
{
"animation_production_studios": "Null",
"audio": "English,Japanese",
"videos_aips": "400,824,1191",
"videos_dash": true
},
{
"animation_production_studios": "Null",
"audio": "English,Japanese",
"videos_aips": "401,825,1192",
"videos_dash": true
},
{
"animation_production_studios": "Studio Chizu",
"audio": "English,Japanese",
"videos_aips": "403,826,1193",
"videos_dash": true
},
{
"animation_production_studios": "Studio Chizu",
"audio": "English,Japanese",
"videos_aips": "404,827,1194",
"videos_dash": true
}
]
请注意,我已尝试更正您的输入以使其有效并放在“数据”下。这里的想法是,您将通过 map 进行外循环(遍历父数组)并进行内循环(遍历视频)。可能有一种更有效的方法将两个循环组合成一个循环。如果我发现什么,我会更新。
推荐阅读
- jquery - 如何为一个手风琴进行多个活动切换?
- java - 将 WireMock Server 作为 SpringBoot 应用程序运行
- javascript - discord.js javascript 命令处理程序 - 找不到模块错误
- python-3.x - Python 3 中的条件问题
- ios - 带有 iOS 13 的 Facebook 登录工具包“canOpenURL:URL 失败:“fbauth2:///””
- git - 通过补丁添加时,有没有办法在 git 中添加未跟踪的文件?
- node.js - 使用 fetch 发送表单数据
- python-3.x - 如何在 python 中解决这个 if else 语句?
- python - pyautogui可以用来防止windows锁屏吗?
- reducers - GEE 中新定义的网格单元内不同年份的图像收集数据的总和