从dataweave 2.0 Mule 4中的父JSON对象中提取JSON键值对的子集作为对象

从dataweave 2.0 Mule 4中的父JSON对象中提取JSON键值对的子集作为对象,mule,dataweave,anypoint-studio,Mule,Dataweave,Anypoint Studio,我有一个dataweave挑战,如果不把它复杂化,我就无法解决它 输入JSON负载 所需产量 这里有一个陷阱。我不允许在转换消息中使用上面显示的输出格式结构,或者使用-operation删除键 所以基本上,我们不应该使用下面的dwl %dw 2.0 output application/json --- (payload - "Region" - "SubRegion") 或 我们如何通过使用Lambdas、Reduce、mapObject、函数或任何其

我有一个dataweave挑战,如果不把它复杂化,我就无法解决它

输入JSON负载

所需产量

这里有一个陷阱。我不允许在转换消息中使用上面显示的输出格式结构,或者使用-operation删除键

所以基本上,我们不应该使用下面的dwl

%dw 2.0
output application/json
---
(payload - "Region" - "SubRegion")

我们如何通过使用Lambdas、Reduce、mapObject、函数或任何其他选择的操作(上述受限方法/用法除外)来实现所需的输出

非常感谢您提供的任何解决方案。

听起来filterObject适合您

听起来filterObject适合你


同样方法的另一个版本

%dw 2.0
output application/json
---
payload mapObject {
    (($$) : $) if (($$) ~= "Name" or ($$) ~= "Age")
}

同样方法的另一个版本

%dw 2.0
output application/json
---
payload mapObject {
    (($$) : $) if (($$) ~= "Name" or ($$) ~= "Age")
}

这就是你要找的吗

%dw 2.0
output application/json
---
payload filterObject ((value, key,index) -> (index <2 ))

这就是你要找的吗

%dw 2.0
output application/json
---
payload filterObject ((value, key,index) -> (index <2 ))

另一种格式副本为:

%dw 2.0
output application/json
---
payload mapObject {
    (($$) : $) if (($$$) < 2)
}

另一种格式副本为:

%dw 2.0
output application/json
---
payload mapObject {
    (($$) : $) if (($$$) < 2)
}

谢谢这很好。是否有任何方法可以将数值作为函数参数传递,从而提取所需的JSON?我排除其他两种方法的原因是为了实现不在dwl中硬编码任何键名的目的。当我们需要提取更多的密钥时,这种方法会使事情复杂化。如果输入有30个键值对,如果我们只想提取前10个键值。肯定还有其他方法可以解决这个问题。我尝试在不使用任何硬编码键名的情况下构造函数,但它抛出了一个最大堆栈256字节。堆栈溢出。联机dataweave编辑器出错。您能发布您提出的函数吗?如果在filterObject函数中使用index而不是key,则可以提取前10项。即有效负载过滤器对象值、键、索引->索引<10谢谢。这很好。是否有任何方法可以将数值作为函数参数传递,从而提取所需的JSON?我排除其他两种方法的原因是为了实现不在dwl中硬编码任何键名的目的。当我们需要提取更多的密钥时,这种方法会使事情复杂化。如果输入有30个键值对,如果我们只想提取前10个键值。肯定还有其他方法可以解决这个问题。我尝试在不使用任何硬编码键名的情况下构造函数,但它抛出了一个最大堆栈256字节。堆栈溢出。联机dataweave编辑器出错。您能发布您提出的函数吗?如果在filterObject函数中使用index而不是key,则可以提取前10项。即有效负载过滤器对象值、键、索引->索引<10谢谢。但是,如果输入有更多的键要提取,这种方法将创建太多的锅炉板代码。我们是否可以实现一个函数,该函数可以获取一个数字并提取这些键值,而不必在dwl.Boilerplate中硬编码键值?这是怎么回事?这是什么背景?谢谢。但是,如果输入有更多的键要提取,这种方法将创建太多的锅炉板代码。我们是否可以实现一个函数,该函数可以获取一个数字并提取这些键值,而不必在dwl.Boilerplate中硬编码键值?这是怎么回事?这是什么背景?你在找@Thinker-101干什么?是否要在不硬处理字段的情况下删除字段?是。这就是我要照顾的。多亏了萨利姆·汗。我得到了答案。你可以试试这个:有效载荷-[区域,子区域]-字符串数组是动态设置的。你在@Thinker-101后面找什么?是否要在不硬处理字段的情况下删除字段?是。这就是我要照顾的。多亏了萨利姆·汗。我得到了答案。你可以试试这个:payload-[区域,子区域]-其中字符串数组是动态设置的。
%dw 2.0
output application/json
---
payload mapObject {
    (($$) : $) if (($$$) < 2)
}