如何解决使用 dataweave 2.0 将 JSON 数组转换为对象
我的有效负载低于层次结构,并尝试根据列“DeleteIndicator”=“Y”进行过滤。这些是我将得到的固定列。我想遍历有效负载并检查 DeleteIndicator。更新了内部数组中多个孩子的输入和预期输出。
输入:
{
"Num":4363886,"LineItems":[
{
"DetailGUID":"B439E023360C","DeleteIndicator":"Y"
},{
"DetailGUID":"B439E023360C","LineQuantity":[
{
"AltGUID":"2B43AC4203DC","DeleteIndicator":"Y"
},{
"AltGUID":"2B43AC4203DD","DeleteIndicator":"Y"
}
]
},"ShipTo":[
{
"ShipToGUID":"2B43AC4201AB","DeleteIndicator":"Y"
},{
"ShipToGUID":"2B43AC4201AC","DeleteIndicator":"Y"
}
]
}
]
}
]
}
预期输出:
{
"Num":4363886,"Details":[
{
"DetailGUID":"B439E023360C","AltGUID":null,"ShipToGUID":null
},"AltGUID":"2B43AC4203DC","AltGUID":"2B43AC4203DD","ShipToGUID":"2B43AC4201AB"
},"ShipToGUID":"2B43AC4201AC"
}
]
}
解决方法
这应该可以完成您的工作。如果您需要任何说明,请告诉我。
%dw 2.0
output application/json
---
{
Num:payload.Num,Details:payload.LineItems map (v0,k0) ->
{
DetailGUID:v0..DetailGUID[0],AltGUID:v0..AltGUID[0],ShipToGUID:v0..ShipToGUID[0]
}
}
,
嗯,这有点复杂,但我已尽力使代码可读和记录。 尝试从不同的角度看问题。认为您正试图在所有“LineQuantity”中“传播”“LineItems”的字段。
%dw 2.0
// This Function takes a json and an array and spreads the json fields
// across each elements of the array.
fun spreadAcrossArray(json: Object,array: Array | Null) = (array default [{}]) map {
(json),($)
}
//Here is the main logic of getting the payload.
//The idea is first to "Spread" the lineItem Elements across all the "LineQuantity"
//and then spread those to all "ShipTo" elements.
fun spreadLineItemAcrossLineQuantity(lineItems: Array) = lineItems map ((lineItem) -> do {
var lineItemSpreadedAcrossQuantity =
{DetailGUID: lineItem.DetailGUID} spreadAcrossArray lineItem.LineQuantity
---
flatten(lineItemSpreadedAcrossQuantity map ({
DetailGUID: $.DetailGUID,AltGUID: $.AltGUID
} spreadAcrossArray $.ShipTo)) //Map app the lineItemSpreadedAcrossQuantity with spreading them to lineItemSpreadedAcrossQuantity.ShipTo
}
)
output application/json
---
{
Num: payload.Num,Details: flatten(spreadLineItemAcrossLineQuantity(payload.LineItems))
map {
DetailGUID: $.DetailGUID,AltGUID: $.AltGUID,ShipToGUID: $.ShipToGUID
}
}
它需要稍后展平数组,因为您基本上是在 spreadAcrossArray
函数中传递一个对象,作为回报,您将获得一个数组。而且 map 函数也返回一个数组,所以你得到的是一个数组数组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。