You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用DataWeave(MuleSoft)将嵌套JSON转换为扁平化数组?

问题

需要将如下嵌套JSON结构,通过MuleSoft的DataWeave转换为扁平化的数组结构:

输入JSON

{  
  "currentPage": "0",  
  "numberElements": "1",  
  "continuable": null,  
  "hasNextPage": "false",  
  "totalOfRecords": "1",  
  "totalOfPages": "1",  
  "result": [  
    {  
      "idRelatorio": "000000010",  
      "saldos": [  
        {  
          "testId": "0000002",  
          "relatorios": [                    
          ]  
        },  
        {  
          "testId": "02045120",  
          "relatorios": [  
            {  
              "relatorioId": "001001",  
              "dataHora": "2022-01-01T00:00:00",  
              "relatorio": "test 1",  
              "custoRelatorio": "170.00",  
              "controleRelatorio": "001_2022"  
            },  
            {  
              "relatorioId": "001002",  
              "dataHora": "2022-02-02T00:00:00",  
              "relatorio": "test 2",  
              "custoRelatorio": "110.00",  
              "controleRelatorio": "001_2022"  
            }  
          ]  
        },  
        {  
          "testId": "03132311",  
          "relatorios": [  
            {  
              "relatorioId": "001003",  
              "dataHora": "2022-03-03T00:00:00",  
              "relatorio": "test 3",  
              "custoRelatorio": "140.00",  
              "controleRelatorio": "003_2022"  
            },  
            {  
              "relatorioId": "001004",  
              "dataHora": "2022-02-02T00:00:00",  
              "relatorio": "test 4",  
              "custoRelatorio": "90.00",  
              "controleRelatorio": "004_2022"  
            }  
          ]  
        },  
        {  
          "testId": "103125468",  
          "relatorios": [  
            {  
              "relatorioId": "001004",  
              "dataHora": "2022-01-01T00:00:00",  
              "relatorio": "test 5",  
              "custoRelatorio": "130.00",  
              "controleRelatorio": "004_2022"  
            },  
            {  
              "relatorioId": "001005",  
              "dataHora": "2022-02-02T00:00:00",  
              "relatorio": "test 6",  
              "custoRelatorio": "100.00",  
              "controleRelatorio": "005_2022"  
            },  
            {  
              "relatorioId": "001006",  
              "dataHora": "2022-02-02T00:00:00",  
              "relatorio": "test 7",  
              "custoRelatorio": "80.00",  
              "controleRelatorio": "006_2022"  
            },  
            {  
              "relatorioId": "001007",  
              "dataHora": "2022-02-02T00:00:00",  
              "relatorio": "test 8",  
              "custoRelatorio": "200.00",  
              "controleRelatorio": "007_2022"  
            }  
          ]  
        }  
      ]  
    }  
  ]
}

期望输出

[
  {  
    "relatorioId": "001001",  
    "dataHora": "2022-01-01T00:00:00",  
    "relatorio": "test 1",  
    "custoRelatorio": "170.00",  
    "controleRelatorio": "001_2022"  
  },  
  {  
    "relatorioId": "001002",  
    "dataHora": "2022-02-02T00:00:00",  
    "relatorio": "test 2",  
    "custoRelatorio": "110.00",  
    "controleRelatorio": "001_2022"  
  },  
  {  
    "relatorioId": "001003",  
    "dataHora": "2022-03-03T00:00:00",  
    "relatorio": "test 3",  
    "custoRelatorio": "140.00",  
    "controleRelatorio": "003_2022"  
  },  
  {  
    "relatorioId": "001004",  
    "dataHora": "2022-02-02T00:00:00",  
    "relatorio": "test 4",  
    "custoRelatorio": "90.00",  
    "controleRelatorio": "004_2022"  
  },  
  {  
    "relatorioId": "001004",  
    "dataHora": "2022-01-01T00:00:00",  
    "relatorio": "test 5",  
    "custoRelatorio": "130.00",  
    "controleRelatorio": "004_2022"  
  },  
  {  
    "relatorioId": "001005",  
    "dataHora": "2022-02-02T00:00:00",  
    "relatorio": "test 6",  
    "custoRelatorio": "100.00",  
    "controleRelatorio": "005_2022"  
  },  
  {  
    "relatorioId": "001006",  
    "dataHora": "2022-02-02T00:00:00",  
    "relatorio": "test 7",  
    "custoRelatorio": "80.00",  
    "controleRelatorio": "006_2022"  
  },  
  {  
    "relatorioId": "001007",  
    "dataHora": "2022-02-02T00:00:00",  
    "relatorio": "test 8",  
    "custoRelatorio": "200.00",  
    "controleRelatorio": "007_2022"  
  }
]

解决方案

以下是实现该转换的DataWeave代码:

%dw 2.0
output application/json
---
flatten(payload.result.saldos.relatorios)

代码说明

  1. payload.result.saldos.relatorios:通过链式访问,直接定位到所有saldos数组中的relatorios子数组,此时得到的是一个包含多个数组的嵌套数组
  2. flatten():使用DataWeave内置的flatten函数,将嵌套数组结构扁平化合并为单层数组,自动过滤空的relatorios数组

内容的提问来源于stack exchange,提问作者Robson Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:18:17