在不触及其他字段的情况下仅更新 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
设置您的转换。也不要使用对象串联来更改这样的值。
正在考虑有效负载...
{
"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
设置您的转换。也不要使用对象串联来更改这样的值。