如何使用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)
代码说明
payload.result.saldos.relatorios:通过链式访问,直接定位到所有saldos数组中的relatorios子数组,此时得到的是一个包含多个数组的嵌套数组flatten():使用DataWeave内置的flatten函数,将嵌套数组结构扁平化合并为单层数组,自动过滤空的relatorios数组
内容的提问来源于stack exchange,提问作者Robson Silva
相关产品推荐
相关产品推荐

