如何解决基于“是否存在密钥”的 Dataweave 转换
我需要对键进行 dataweave 转换,如果它存在,而不是如果键不存在。
样本输入
[
{
"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": "value22.1"
"KeyB.2": null
},"KeyC": null
}
]
问题 1:真的是 JSON 格式吗?
问题 2:在 DW 2.0 中如何做这样的转换?
提前致谢:)
解决方法
有两种方法可以做这种事情,
- 是在对象上使用条件元素 conditional element
{
(a: payload.a) if(payload.a?)
}
- 有一个 writer 属性可以避免写入空值 skipNullOn
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 )
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。