基于 'if key present or not' 的数据编织转换
Dataweave Transformation based on 'if key present or not'
我需要对密钥进行数据编织转换,如果它存在,如果密钥不存在则不需要。
样本输入
[
{
"Key1": "Value1",
"Key2": {
"Key2.1": "value2.1",
"Key2.2": "Value2.2"
},
"Key3": "Value3",
},
{
"Key1": "Value11",
"Key2": {
"Key2.1": "value22.1"
}
}
]
样本输出
[
{
"KeyA": "Value1",
"KeyB": {
"KeyB.1": "value2.1",
"KeyB.2": "Value2.2"
},
"KeyC": "Value3"
},
{
"KeyA": "Value11",
"KeyB": {
"KeyB.1": "value22.1"
}
}
]
预计不会
[
{
"KeyA": "Value1",
"KeyB": {
"KeyB.1": "value2.1",
"KeyB.2": "Value2.2"
},
"KeyC": "Value3"
},
{
"KeyA": "Value11",
"KeyB": {
"KeyB.1": "value22.1"
"KeyB.2": null
},
"KeyC": null
}
]
问题1:真的是JSON格式吗?
问题2:如何在DW 2.0中进行这样的转换?
提前致谢:)
有两种方法可以做这种事情,
- 就是在对象上使用条件元素conditional element
{
(a: payload.a) if(payload.a?)
}
- 有写手属性避免写nullskipNullOn
output application/json skipNullOn="everywhere"
---
{
a: payload.a
}
输入不是有效的 JSON 文档,因为在 Key3 之后有一个额外的逗号,但不清楚这是否是您要问的或为什么。
删除逗号后,输入是两个 JSON 对象的 JSON 数组。您可以使用 map() 来转换每个元素,然后使用 mapObject() 来转换每个对象中的键。 mapObject() 不会创建新键,只会转换现有键,因此不存在创建新键的风险。例如,我使用 transformKey() 来封装所需的密钥转换。我使用的是内置的 lower() 函数,但您可以使用任何您想要转换密钥的逻辑。
%dw 2.0
output application/json
fun transformKey(k)= lower(k)
---
payload map (
$ mapObject ((value, key, index) -> (transformKey(key)): value )
)
我需要对密钥进行数据编织转换,如果它存在,如果密钥不存在则不需要。
样本输入
[
{
"Key1": "Value1",
"Key2": {
"Key2.1": "value2.1",
"Key2.2": "Value2.2"
},
"Key3": "Value3",
},
{
"Key1": "Value11",
"Key2": {
"Key2.1": "value22.1"
}
}
]
样本输出
[
{
"KeyA": "Value1",
"KeyB": {
"KeyB.1": "value2.1",
"KeyB.2": "Value2.2"
},
"KeyC": "Value3"
},
{
"KeyA": "Value11",
"KeyB": {
"KeyB.1": "value22.1"
}
}
]
预计不会
[
{
"KeyA": "Value1",
"KeyB": {
"KeyB.1": "value2.1",
"KeyB.2": "Value2.2"
},
"KeyC": "Value3"
},
{
"KeyA": "Value11",
"KeyB": {
"KeyB.1": "value22.1"
"KeyB.2": null
},
"KeyC": null
}
]
问题1:真的是JSON格式吗?
问题2:如何在DW 2.0中进行这样的转换?
提前致谢:)
有两种方法可以做这种事情,
- 就是在对象上使用条件元素conditional element
{
(a: payload.a) if(payload.a?)
}
- 有写手属性避免写nullskipNullOn
output application/json skipNullOn="everywhere"
---
{
a: payload.a
}
输入不是有效的 JSON 文档,因为在 Key3 之后有一个额外的逗号,但不清楚这是否是您要问的或为什么。
删除逗号后,输入是两个 JSON 对象的 JSON 数组。您可以使用 map() 来转换每个元素,然后使用 mapObject() 来转换每个对象中的键。 mapObject() 不会创建新键,只会转换现有键,因此不存在创建新键的风险。例如,我使用 transformKey() 来封装所需的密钥转换。我使用的是内置的 lower() 函数,但您可以使用任何您想要转换密钥的逻辑。
%dw 2.0
output application/json
fun transformKey(k)= lower(k)
---
payload map (
$ mapObject ((value, key, index) -> (transformKey(key)): value )
)