如何正确地从有效负载中添加和删除元素? (或视情况更换)

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 时,使用 defaultwhen...otherwise 更简单。

%dw 1.0
%output application/json
%var keyMap={ town: "city", district: "area" }
%function replaceKey(keyName) (keyMap[keyName] default keyName)
---
payload mapObject  ( (replaceKey($$)) : $ )