【问题标题】:In Dataweave 2.0 how to create nested array from flat array - Mule 4在 Dataweave 2.0 中如何从平面数组创建嵌套数组 - Mule 4
【发布时间】:2021-06-11 07:57:40
【问题描述】:

我需要使用从不同 API 收到的响应创建一个嵌套数组。我有这个包含所有数据的平面数组。什么是创建嵌套数组的最佳方法,其中子项根据其结果状态嵌套到其父项。

输入 JSON 平面数组如下:

  [
   {
    "studentNumber": "FP5500",
    "studentName": "John Doe",
    "Subject": "Arts",
    "grade": "B",
    "result": "Pass"
   },{
    "studentNumber": "FP5501",
    "studentName": "Jane Doe",
    "Subject": "Arts",
    "grade": "B",
    "result": "Pass"
   },{
    "studentNumber": "FP5501",
    "studentName": "Jane Doe",
    "Subject": "Economics",
    "grade": "A",
    "result": "Pass"
   },{
    "studentNumber": "FP5502",
    "studentName": "Bane Doe",
    "Subject": "Arts",
    "result": "Fail"
   }
]

期望输出为嵌套数组,如下格式:

[
  {
   "studentNumber": "FP5500",
   "studentName": "John Doe",
   "Status": "Pass",
   "reportDetails": {
     "Subject": "Arts",
     "grade": "B"
    }
  },
  {
   "studentNumber": "FP5501",
   "studentName": "Jane Doe",
   "Status": "Pass",
   "reportDetails": [{
     "Subject": "Arts",
     "grade": "B"
    },
    {
     "Subject": "Economics",
     "grade": "A"
    }]
  } 
]

数组中的第四个元素 (3rd student) 应该被忽略,因为 "result""Fail",但是前两个学生应该被包含在响应中,应该只有 "StudentName" => Jane Doe 条目,其中包含用于主题详细信息的嵌套数组。

我进行了研究,但找不到有效的解决方案(不使用 for 或 foreach 循环)。我尝试使用 mapObject 对重复地图进行地图和过滤,但没有进展。我该如何解决?

【问题讨论】:

    标签: arrays nested dataweave mulesoft mule4


    【解决方案1】:

    快速简便的方法如下:

    脚本

    %dw 2.0
    output application/json
    ---
    [payload filter $.result != "Fail" groupBy $.studentNumber   mapObject {
        "studentNumber": $.studentNumber[0],
        "studentName":  $.studentName[0],
        "Subject": $.Subject[0],
        "Status": $.result[0],
        (if (sizeOf($) == 1)
         "reportDetails": ($ map {
            "Subject": $.Subject,
            "Grade": $.grade
        
        })[0]
        else
        "reportDetails": $ map {
            "Subject": $.Subject,
            "Grade": $.grade
        
        })
        
    }]
    

    输出

    [
      {
        "studentNumber": "FP5500",
        "studentName": "John Doe",
        "Subject": "Arts",
        "Status": "Pass",
        "reportDetails": {
          "Subject": "Arts",
          "Grade": "B"
        },
        "studentNumber": "FP5501",
        "studentName": "Jane Doe",
        "Subject": "Arts",
        "Status": "Pass",
        "reportDetails": [
          {
            "Subject": "Arts",
            "Grade": "B"
          },
          {
            "Subject": "Economics",
            "Grade": "A"
          }
        ]
      }
    ]
    

    【讨论】:

      【解决方案2】:

      已接受答案的脚本输出似乎与 OP 的预期输出不匹配。不知道为什么这是被接受的答案。

      这是另一个脚本 -

      %dw 2.0
      output application/json
      ---
      (payload filter ((student) -> student.result == 'Pass') 
          groupBy ((student) -> student.studentNumber))
              pluck $ 
                  reduce (item, accumulator= []) -> 
                      accumulator ++ [(item[0] - "grade" - "Subject" - "result") 
                          ++ {Status: item[0].result, resultDetails: item map {Subject: $.Subject, grade: $.grade}}]
              
                      
      

      生产-

      [
        {
          "studentNumber": "FP5500",
          "studentName": "John Doe",
          "Status": "Pass",
          "resultDetails": [
            {
              "Subject": "Arts",
              "grade": "B"
            }
          ]
        },
        {
          "studentNumber": "FP5501",
          "studentName": "Jane Doe",
          "Status": "Pass",
          "resultDetails": [
            {
              "Subject": "Arts",
              "grade": "B"
            },
            {
              "Subject": "Economics",
              "grade": "A"
            }
          ]
        }
      ]
      
      

      【讨论】:

      • 接受的答案与最初帖子中的要求相匹配。
      • 好的,我没有看到最初的帖子。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2021-03-04
      相关资源
      最近更新 更多