如何正确地从有效负载中添加和删除元素? (或视情况更换)
how properly to add and remove elements from payload? (or replace on condition)
所以我的负载具有旧类型的属性,我想将它们迁移为所有其余逻辑正在使用的新属性。所以在做验证之前我想稍微修改一下。
目前我设法在单独的转换中添加和删除,但是否可以一次性完成?
示例负载:
{
"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
我想检查 payload 在 town 键中是否没有空值并添加具有 town 键值的新键 city,同样检查 distrinct 是否不为 null 然后将其值添加为 area 键。然而,它只发生在城市(我知道它会被添加到底部,但在我的情况下顺序不是问题)但是钥匙可能不存在(它可能没有城镇,或者可能没有区划,或者两者都没有)
在下一次转换中:
%dw 1.0
%output application/json
---
payload -- {town: payload.town}
when
payload.town != null
otherwise
payload
我尝试检查密钥是否存在,然后删除旧密钥,但运气不佳:(
有帮助吗?
太复杂了。您可以使用 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($$)) : $ )
所以我的负载具有旧类型的属性,我想将它们迁移为所有其余逻辑正在使用的新属性。所以在做验证之前我想稍微修改一下。 目前我设法在单独的转换中添加和删除,但是否可以一次性完成?
示例负载:
{
"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
我想检查 payload 在 town 键中是否没有空值并添加具有 town 键值的新键 city,同样检查 distrinct 是否不为 null 然后将其值添加为 area 键。然而,它只发生在城市(我知道它会被添加到底部,但在我的情况下顺序不是问题)但是钥匙可能不存在(它可能没有城镇,或者可能没有区划,或者两者都没有)
在下一次转换中:
%dw 1.0
%output application/json
---
payload -- {town: payload.town}
when
payload.town != null
otherwise
payload
我尝试检查密钥是否存在,然后删除旧密钥,但运气不佳:( 有帮助吗?
太复杂了。您可以使用 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($$)) : $ )