如何正确地从有效载荷中添加和删除元素? (或有条件更换)
Posted
技术标签:
【中文标题】如何正确地从有效载荷中添加和删除元素? (或有条件更换)【英文标题】:how properly to add and remove elements from payload? (or replace on condition) 【发布时间】:2022-01-13 15:41:31 【问题描述】:所以我有具有旧类型属性的有效负载,我想将它们迁移为所有其余逻辑正在使用的新属性。因此,在进行验证之前,我想对其进行一些修改。 目前我设法在单独的转换中添加和删除,但是否可以一次性完成?
示例负载:
"country": "Country",
"town": "Town",
"district": "Dist",
"owner": "Owner"
输出应该是:
"country": "Country",
"city": "Town",
"area": "Dist",
"owner": "Owner"
所以我添加了变换:
%dw 1.0
%output application/json
---
payload ++ city: payload.town
when
payload.town != null
otherwise
payload ++ area: payload.distrinct
when
payload.distrinct != null
otherwise
payload
我想检查有效载荷是否在城镇键中没有空值,并使用城镇键值添加新的键城市,同样检查 distrinct 是否不为空,然后将其值添加为区域键。然而它只发生在城市(我知道它会被添加到底部,但在我的情况下顺序不是问题)但是钥匙可能不存在(它可能没有城镇,或者可能没有区分或可能两者都没有)
在下一次变换时:
%dw 1.0
%output application/json
---
payload -- town: payload.town
when
payload.town != null
otherwise
payload
我尝试检查密钥是否存在然后删除旧的,但没有运气:( 有什么帮助吗?
【问题讨论】:
删除转换在哪里? 已添加,但与添加构造类似,只是有 -- 而不是 ++ 【参考方案1】:这太复杂了。您可以使用mapObject 来转换每个键,而不是添加和删除键。然后参数化转换变得微不足道。同样,当值为 null 时,使用 default
比使用 when...otherwise
更简单。
%dw 1.0
%output application/json
%var keyMap= town: "city", district: "area"
%function replaceKey(keyName) (keyMap[keyName] default keyName)
---
payload mapObject ( (replaceKey($$)) : $ )
【讨论】:
好吧,我不是专家,这就是为什么要问一个更好的方法:) 我喜欢你的方法,非常感谢你的帮助。在那个函数中,如果没有城镇密钥(或地区),它会运行没有错误吗? 是的,它与处理其他密钥之一相同,例如所有者。 mapObject 为每个键独立工作。以上是关于如何正确地从有效载荷中添加和删除元素? (或有条件更换)的主要内容,如果未能解决你的问题,请参考以下文章
如何有效地从 ArrayList 或字符串数组中删除所有空元素?