dataweave - 使用 dwl 2.0 展平具有可变深度的嵌套数组
问题描述
我有以下数据:
{
"currencyCode": "GBP",
"type": "New",
"orderLines": [
{
"currencyCode": "EUR",
"id": "8023O000000Cc8pQAC",
"orderLines": [
{
"currencyCode": "EUR",
"id": "8023O000000Cc8qQAC",
"parentId": "8023O000000Cc8pQAC",
"orderLines": []
},
{
"currencyCode": "EUR",
"id": "8023O000000Cc8rQAC",
"parentId": "8023O000000Cc8pQAC",
"orderLines": []
}
]
},
{
"currencyCode": "EUR",
"id": "8023O000000Cc8vQAC",
"orderLines": [
{
"currencyCode": "EUR",
"id": "8023O000000Cc8wQAC",
"parentId": "8023O000000Cc8vQAC",
"orderLines": []
}
]
}
]
}
注意:orderLines 数组可以是任意深度
我想要这样的输出:
{
"currencyCode": "GBP",
"type": "New",
"orderLines": [
{
"currencyCode": "EUR",
"id": "8023O000000Cc8pQAC",
"orderLines": []
},
{
"currencyCode": "EUR",
"id": "8023O000000Cc8qQAC",
"parentId": "8023O000000Cc8pQAC",
"orderLines": []
},
{
"currencyCode": "EUR",
"id": "8023O000000Cc8rQAC",
"parentId": "8023O000000Cc8pQAC",
"orderLines": []
},
{
"currencyCode": "EUR",
"id": "8023O000000Cc8vQAC",
"orderLines": []
},
{
"currencyCode": "EUR",
"id": "8023O000000Cc8wQAC",
"parentId": "8023O000000Cc8vQAC",
"orderLines": []
}
]
}
解决方案
您可以使用执行以下操作的递归函数来执行此操作:
- 如果关卡中没有元素返回
[]
- 递归地采用
orderLines
每个级别的(没有 children 字段) - 附加
orderLines
下一级的
像这样:
%dw 2.0
output application/json
fun getNextLevel(orders: Array) = flatten(orders.orderLines)
fun removeChildren(orders: Array) =
orders map ((value) ->
value - "orderLines"
)
fun getOrders(orders: Array) = do {
orders match {
case [] -> []
else -> removeChildren(orders) ++ getOrders(getNextLevel(orders))
}
}
---
{
"currencyCode": payload.currencyCode,
"type": payload."type",
"orderLines": getOrders(payload.orderLines)
}
推荐阅读
- netsuite - 将日期过滤器添加到脚本搜索(SuiteScript 1.0)的正确方法是什么?
- javascript - 如何将一个三维数组分成三个 for in 循环?
- python - python2和python3中的atexit - 不同的行为
- ruby-on-rails - 在 Ruby 中抢救异常时的问题
- javascript - 具有唯一 id 元素的 JQuery 总和行
- windows - 任务列表 csv 脚本
- javascript - 如何将 JSON(从 google-trends-api)转换为 CSV?
- powershell - 如何在 PowerShell 中将数组对象转换为一个对象?
- reporting-services - SSRS 报告中的垂直文本框在生产中不显示,在 PDF 导出和打印模式下显示
- javascript - jQuery单击多次触发