从dataweave 2.0 Mule 4中的父JSON对象中提取JSON键值对的子集作为对象
Posted
技术标签:
【中文标题】从dataweave 2.0 Mule 4中的父JSON对象中提取JSON键值对的子集作为对象【英文标题】:Extracting a subset of JSON key-value pairs as an Object from a Parent JSON Object in dataweave 2.0 Mule 4 【发布时间】:2021-03-16 04:56:19 【问题描述】:我有一个数据编织挑战,如果不让它变得复杂,我就无法解决。
输入 JSON 负载
"Name" : "Mr.wolf",
"Age" : 26,
"Region" : "USA",
"SubRegion": "Pacific"
需要输出
"Name" : "Mr.wolf",
"Age" : 26
这是一个问题。我不允许在转换消息中使用上面显示的输出格式结构,或者使用“-”操作删除键。
所以基本上,我们不应该使用下面的 dwl。
%dw 2.0
output application/json
---
(payload - "Region" - "SubRegion")
或
%dw 2.0
output application/json
---
"Name" : payload.Name,
"Age" : payload.Age
除了上面显示的受限方法/用法之外,我们如何使用 Lambda、Reduce、mapObject、函数或任何其他选择的操作来实现所需的输出。
非常感谢提供的任何解决方案。
【问题讨论】:
@Thinker-101 之后你在做什么?是否要删除字段而不对其进行硬编码? 是的。这就是我要照顾的。感谢萨利姆汗。我得到了答案。 你可以试试这个:payload -- ["Region","SubRegion"]
-- 字符串数组是动态设置的。
【参考方案1】:
这就是你要找的吗?
%dw 2.0
output application/json
---
payload filterObject ((value, key,index) -> (index <2 ))
【讨论】:
【参考方案2】:听起来像filterObject
可能适合你。 Documentation
payload filterObject ((value, key) -> (key ~= "Name" or key ~= "Age"))
【讨论】:
谢谢。这很好。有什么方法可以将数值作为可以提取所需 JSON 的函数参数传递?我排除其他两种方法的原因是为了实现不在 dwl 中硬编码任何键名的意图。当我们有更多的键要提取时,这种方法会使事情复杂化。如果输入有 30 个键值对,并且我们想单独提取前 10 个键。必须有其他方法来解决这个问题。 我尝试在不使用任何硬编码键名的情况下构造函数,但它在在线数据编织编辑器中引发了Max stack 256 bytes. ***.
错误。
你能发布你想出的函数吗?如果您在 filterObject
函数中使用索引而不是键,则可以提取前 10 项。 IE。 payload filterObject ((value, key, index) -> (index < 10))
【参考方案3】:
同样方法的另一种演绎。
%dw 2.0
output application/json
---
payload mapObject
(($$) : $) if (($$) ~= "Name" or ($$) ~= "Age")
【讨论】:
谢谢。但是如果输入有更多的键要提取,这种方法会创建太多的样板代码。我们可以实现一个函数,它可以接受一个数字并提取那些许多键值而不用硬编码 dwl 中的键。 样板 - 怎么样?这是什么背景?【参考方案4】:另一种说法是:
%dw 2.0
output application/json
---
payload mapObject
(($$) : $) if (($$$) < 2)
【讨论】:
以上是关于从dataweave 2.0 Mule 4中的父JSON对象中提取JSON键值对的子集作为对象的主要内容,如果未能解决你的问题,请参考以下文章
Mule 4:Dataweave 2.0:如何处理大小超过10k的数据库记录?
在dataweave 2.0 Mule4中将XML CDATA格式转换为JSON格式