mule - Dataweave(嵌套)映射条件映射
问题描述
案子
我有一个 json 对象(从 Excell 文件中导入,之后也需要像一个一样格式化)。所以我根本不能弄乱结构。
输入由带有表格的 json 格式对象组成,每个表格都是一个对象数组。
当sheetnumber等于'append'对象中的kwadrantcode时,我想将另一个对象(var'append')添加到数组(作为最后一项)
输入 1
有效载荷
{
"(sheet)1": [
{
"kwadrantId": 1.0,
"Team": "blauw1",
"timestamp": "2019-09-26T16:37:54",
"controlecode": 12431
}
],
"(sheet)2": [
{
"kwadrantId": 2.0,
"Team": "rood1",
"timestamp": "2019-09-26T16:37:54",
"controlecode": 81243
},
{
"kwadrantId": 2.0,
"Team": "blauw2",
"timestamp": "2019-09-26T18:00:54",
"controlecode": 67676
}
]
}
到目前为止的代码
%dw 2.0
output application/json
var append = {"kwadrant": "2",
"controlecode": "22222",
"kleur": "blauw",
"subteam": "1",
"form_id": "83177",
"submit": "Claim"
}
---
payload pluck($) map (sheet, sheetnumber)-> (sheet map (claim, claimcounter) -> claim) ++ [append]
此代码成功地将对象附加到正确位置的数组中。这里的问题是最后一部分(地图目标)似乎不允许有条件。所以它总是会在每个列表的末尾插入它,而不仅仅是我希望它结束的那个。
[
[
{
"kwadrantId": 1.0,
"Team": "blauw1",
"timestamp": "2019-09-26T16:37:54",
"controlecode": "12431"
},
{
"kwadrant": "2",
"controlecode": "22222",
"kleur": "blauw",
"subteam": "1",
"form_id": "83177",
"submit": "Claim"
}
],
[
{
"kwadrantId": 2.0,
"Team": "rood1",
"timestamp": "2019-09-26T16:37:54",
"controlecode": "12431"
},
{
"kwadrantId": 2.0,
"Team": "blauw2",
"timestamp": "2019-09-26T18:00:54",
"controlecode": 67676.0
},
{
"kwadrant": "2",
"controlecode": "22222",
"kleur": "blauw",
"subteam": "1",
"form_id": "83177",
"submit": "Claim"
}
]
]
我尝试过的几件事
honestly, i think i've tried everything the past two hours, but here are a few i can think of out of the top of my head.
++ [append] if (true)
(if true )++ [append]
payload pluck($) map (sheet, sheetnumber)-> (sheet map (claim, claimcounter) -> claim)((if true) ++ [append])
and most variations i can think of with brackets
稍后我会担心将“附加”变量格式化为正确的结构,只是将它放在正确的位置是我似乎无法正常工作的问题。
解决方案
我能想到的最简单的方法是使用mapObject函数
%dw 2.0
output application/json
var append =
{
"kwadrant": "2",
"controlecode": "22222",
"kleur": "blauw",
"subteam": "1",
"form_id": "83177",
"submit": "Claim"
}
fun extractNumber(pageName: Key) =
(pageName as String match /\(sheet\)([0-9]+)/)[1]
---
payload mapObject ((value, key, index) -> do {
if(extractNumber(key) == append.kwadrant)
{(key): value << append}
else
{(key): value}
})
所以基本上我会去根目录中的每一张纸,当它与我需要的一张相匹配时,我需要将它添加到使用<<
推荐阅读
- javascript - discord.js:如何用我的票务系统中的按钮替换反应?
- ruby - 是否可以在 Ruby 中获取关键字参数的默认值?
- azure-functions - Durable Function 中的 Activity 函数
- spring - ojdbc6,版本 11.2,获取 LONG(oracle)值时出错
- python-3.x - 如何自动更新chromedriver
- java - SQL Developer 查询:用 2 个表填充 1 列
- html - 无法将css文件连接到html
- google-play-services - CastStatusCode 2004 (APPLICATION_NOT_FOUND) 是什么意思?
- javascript - 使用无效数据调用的函数 FieldValue.arrayUnion()。不支持的字段值:自定义对象
- java - 在线程“主”com.fasterxml.jackson.databind.exc.MismatchedInputException 中获取异常:无法反序列化