【问题标题】:Nested for loop in Mule DataweaveMule Dataweave 中的嵌套 for 循环
【发布时间】:2016-11-08 18:27:03
【问题描述】:

%dw 1.0 % 输出应用程序/json %var list1 = flowVars.var1

%var list2 = flowVars.var2

我有 2 个列表 list1 和 list2,如下所示。

list1 = [{"empId": "123", "firstName":"John", "lastName":"Doe"},
         {"empId": "456", "firstName":"Anna", "lastName":"Smith"},
         {"empId" : "567", "firstName":"Peter", "lastName":"Jones"}]

list2 = [{"empId": "567", "title":"developer"},
         {"empId": "123", "title":"tester"},
         {"empId": "456", "title":"manager"}]

如何使用 list1 和 list2 创建 list3?对于 list1 中的每个员工,遍历 list2,从 list2 中获取 title 并创建 list3。

list3 = [{"empId" : "123", "firstName":"John", "lastName":"Doe",
          "title" : "tester"}, 
         {"empId" : "456", "firstName":"Anna", "lastName":"Smith",
          "title" : "manager"} ,  
         {"empId" : "567", "firstName":"Peter", "lastName":"Jones",
          "title" : "developer"} ]

【问题讨论】:

    标签: mule dataweave


    【解决方案1】:

    下面的代码对我来说很好。

    %dw 1.0
    %output application/json
    
    
    %var dataLookup = {(flowVars.list2 map {
            ($.empId): $.title
         })}
    
    
    ---
    payload map {
        empId : flowVars.list1[$$].empId,
        firstName : flowVars.list1[$$].firstName,
        lastName: flowVars.list1[$$].lastName,
        title : dataLookup[$.empId]
    }
    

    【讨论】:

      【解决方案2】:

      您可以将 list1 和 list2 放在任何位置,例如流变量。为了演示,我只是在 DW 中创建了两个变量。

      %dw 1.0
      %output application/java
      %var list1 = [{"empId": "123", "firstName":"John", "lastName":"Doe"},
               {"empId": "456", "firstName":"Anna", "lastName":"Smith"},
               {"empId" : "567", "firstName":"Peter", "lastName":"Jones"}]
      %var list2 = [{"empId": "567", "title":"developer"},
               {"empId": "123", "title":"tester"},
               {"empId": "456", "title":"manager"}]
      ---
      list1 map using (titles = list2 filter ((item) -> (item.empId == $.empId))) {
          ($),
          title: titles[0].title when (sizeOf titles) > 0 otherwise ""
      }
      

      所以-

      1. 您将使用map 遍历list1
      2. 使用using关键字,创建一个循环变量titles,其值为当前empId的过滤列表2
      3. ($) 将包含 list1 中的所有属性
      4. 然后使用titles 循环变量添加标题属性。为确保它不会因不存在的记录而失败,请检查大小。

      【讨论】:

        【解决方案3】:

        您可以在下面给出的地图中拥有地图

        {
        node1: (payload map                     
                    {
                    empname: $.column_0,
                    empid: $.column_1
        
                    ( flowvar.payload1 map ({
        node1:
        {
          deptid: $.column_0,
          deptname: $.column_1,
        }
        }
        

        【讨论】:

          猜你喜欢
          • 2016-02-03
          • 1970-01-01
          • 2015-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-26
          相关资源
          最近更新 更多