Mule 无法使用dataweave筛选具有动态键的对象数组

Mule 无法使用dataweave筛选具有动态键的对象数组,mule,dataweave,mulesoft,Mule,Dataweave,Mulesoft,我想根据EmployeeStatus筛选这个对象数组,EmployeeStatus应该是辞职和终止的,而不是活动的。这里每个对象的键都不同,因此我无法应用类似item.key.EmployeeStaus==辞职或终止的逻辑。任何建议或提示都会对我有所帮助 输入有效载荷 所需输出 您可以通过跨结构过滤记录。首先是一个数组,使用map。每个元素都是一个具有单个键的对象,所以让我们先使用mapObject,然后使用filter。我没有尝试删除空数组 %dw 2.0 output application

我想根据EmployeeStatus筛选这个对象数组,EmployeeStatus应该是辞职和终止的,而不是活动的。这里每个对象的键都不同,因此我无法应用类似item.key.EmployeeStaus==辞职或终止的逻辑。任何建议或提示都会对我有所帮助

输入有效载荷

所需输出


您可以通过跨结构过滤记录。首先是一个数组,使用map。每个元素都是一个具有单个键的对象,所以让我们先使用mapObject,然后使用filter。我没有尝试删除空数组

%dw 2.0
output application/json skipNullOn="everywhere"
fun filterEmployeeStatus(e) = e filter ($.Employeestatus == "Resigned" or $.Employeestatus == "Terminated")
---
payload map 
    ( $ mapObject ((value, key, index) -> (key): filterEmployeeStatus(value) ) )
输出:

[
  {
    "626433000000196190": [
      {
        "EmailID": "rubyrichards@zylker.com",
        "Employeestatus": "Resigned"
      }
    ]
  },
  {
    "626433000000196184": [
      
    ]
  },
  {
    "626433000000196178": [
      
    ]
  },
  {
    "626433000000196166": [
      {
        "EmailID": "daveduken@zylker.com",
        "Employeestatus": "Terminated"
      }
    ]
  }
]

您可以通过跨结构过滤记录。首先是一个数组,使用map。每个元素都是一个具有单个键的对象,所以让我们先使用mapObject,然后使用filter。我没有尝试删除空数组

%dw 2.0
output application/json skipNullOn="everywhere"
fun filterEmployeeStatus(e) = e filter ($.Employeestatus == "Resigned" or $.Employeestatus == "Terminated")
---
payload map 
    ( $ mapObject ((value, key, index) -> (key): filterEmployeeStatus(value) ) )
输出:

[
  {
    "626433000000196190": [
      {
        "EmailID": "rubyrichards@zylker.com",
        "Employeestatus": "Resigned"
      }
    ]
  },
  {
    "626433000000196184": [
      
    ]
  },
  {
    "626433000000196178": [
      
    ]
  },
  {
    "626433000000196166": [
      {
        "EmailID": "daveduken@zylker.com",
        "Employeestatus": "Terminated"
      }
    ]
  }
]

也许是这样的:

输入

剧本

输出


也许是这样的:

输入

剧本

输出

下面是另一个例子:

%dw 2.0
output application/json

var data = [
  {
    "626433000000196190": [
      {
        "EmailID": "rubyrichards@zylker.com",
        "Employeestatus": "Resigned"
      }
    ]
  },
  {
    "626433000000196184": [
      {
        "EmailID": "morganfinely@zylker.com",
        "Employeestatus": "Active"
      }
    ]
  },
  {
    "626433000000196178": [
      {
        "EmailID": "jenniferjackson@zylker.com",
        "Employeestatus": "Active"
      }
    ]
  },
  {
    "626433000000196166": [
      {
        "EmailID": "daveduken@zylker.com",
        "Employeestatus": "Terminated"
      }
    ]
  }
]
---
flatten({(data)} pluck $) filter not ($.Employeestatus == "Active")
稍后我将添加解释

编辑:以下是DW文档的说明和链接:

我利用特性{data}来破坏数组并将所有封闭的对象折叠成一个对象。 然后,我使用获取数组中的值。 我利用折叠子数组的第一级,因为我们刚才获取的值也是数组。现在有了一个平面阵列。 现在,我使用删除删除所有未正确执行断言的记录。 下面是另一个例子:

%dw 2.0
output application/json

var data = [
  {
    "626433000000196190": [
      {
        "EmailID": "rubyrichards@zylker.com",
        "Employeestatus": "Resigned"
      }
    ]
  },
  {
    "626433000000196184": [
      {
        "EmailID": "morganfinely@zylker.com",
        "Employeestatus": "Active"
      }
    ]
  },
  {
    "626433000000196178": [
      {
        "EmailID": "jenniferjackson@zylker.com",
        "Employeestatus": "Active"
      }
    ]
  },
  {
    "626433000000196166": [
      {
        "EmailID": "daveduken@zylker.com",
        "Employeestatus": "Terminated"
      }
    ]
  }
]
---
flatten({(data)} pluck $) filter not ($.Employeestatus == "Active")
稍后我将添加解释

编辑:以下是DW文档的说明和链接:

我利用特性{data}来破坏数组并将所有封闭的对象折叠成一个对象。 然后,我使用获取数组中的值。 我利用折叠子数组的第一级,因为我们刚才获取的值也是数组。现在有了一个平面阵列。 现在,我使用删除删除所有未正确执行断言的记录。
嘿@aled。。无论如何,我们不能删除当前的密钥吗???这些密钥对我来说不再是必需的..我只是想消除存在于两者之间的数组的复杂性,这样对于进一步的操作,我将更容易使用结果有效负载,这是我上面所讨论的所需输出..我只是想知道它是否可能或可能脚本末尾的notpull$应该可以帮助您实现这一点。嘿@aled。。无论如何,我们不能删除当前的密钥吗???这些密钥对我来说不再是必需的..我只是想消除存在于两者之间的数组的复杂性,这样对于进一步的操作,我将更容易使用结果有效负载,这是我上面所讨论的所需输出..我只是想知道它是否可能或可能脚本末尾的notpull$应该可以帮助您实现这一点。
[
  {
    "EmailID": "rubyrichards@zylker.com",
    "Employeestatus": "Resigned"
  },
  {
    "EmailID": "daveduken@zylker.com",
    "Employeestatus": "Terminated"
  }
]
%dw 2.0
output application/json

var data = [
  {
    "626433000000196190": [
      {
        "EmailID": "rubyrichards@zylker.com",
        "Employeestatus": "Resigned"
      }
    ]
  },
  {
    "626433000000196184": [
      {
        "EmailID": "morganfinely@zylker.com",
        "Employeestatus": "Active"
      }
    ]
  },
  {
    "626433000000196178": [
      {
        "EmailID": "jenniferjackson@zylker.com",
        "Employeestatus": "Active"
      }
    ]
  },
  {
    "626433000000196166": [
      {
        "EmailID": "daveduken@zylker.com",
        "Employeestatus": "Terminated"
      }
    ]
  }
]
---
flatten({(data)} pluck $) filter not ($.Employeestatus == "Active")