在不触及其他字段的情况下仅更新 dataweave 2.0 中有效负载中的一个字段

Updating only one field in the payload in dataweave 2.0 without touching other fields

正在考虑有效负载...

{
  "name": "foo",
  "age": 17,
  "gender": "Male"
}

我想根据条件更改年龄。我能够执行以下操作(有效载荷可能有更多我们不感兴趣的键值对)

output application/java
---
payload ++ {age: (if(payload.age > 18) payload.age else 18}

但如您所见,输出格式为 java。要将其转换为 JSON,我需要为其添加另一个转换消息,这看起来不是一个好的编码习惯,而且我也负担不起使用额外转换消息的成本。如果我这样做

output application/json
---
payload ++ {age: (if(payload.age > 18) payload.age else 18}

我得到的输出是

{
  "name": "foo",
  "age": 17,
  "gender": "Male",
  "age": 18
}

还有其他方法吗?

第 2 部分 嵌套对象的负载有困难。

{
  "name": "foo",
  "data": {
    "personalData": {
      "age": 17,
      "gender": "Male"
    }
  }
}

旧方法:

%dw 2.0
output application/json
---
{
    (payload - "age"),
    age: if (payload.age > 18) payload.age else 18
}

使用 update 函数的新方法。

%dw 2.0
import * from dw::util::Values
output application/json
---
payload update "age" with (if (payload.age > 18) payload.age else 18)

第 2 部分的更新。根据文档,您可以指定一个路径。阅读文档。

%dw 2.0
import * from dw::util::Values
output application/json
---
payload update ["data", "personalData", "age"] with (if (payload.data.personalData.age > 18) payload.data.personalData.age else 18)

我有点困惑;为什么您需要将其作为输入进行多次转换?只需使用 output application/json 设置您的转换。也不要使用对象串联来更改这样的值。