从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) -&gt; (index &lt; 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格式

如何忽略 DataWeave Mule esb 中的空对象

使用 Mule Dataweave 导入 CSV?

Mule DataWeave 转换消息失败,缺少元数据:id 属性

为什么Multipartform-data在响应Mule Dataweave时删除Nill?