[英]How to sum value in json dataweave
(騾子軟dataweave 1.0)
我想將 json 中的二級對象相加。 如果我有這個 json 值
{
"type": Type1,
"date" :{
"day1" : 1,
"day2" : 2,
"day3" : 3
},
"a" : test
},
{
"type": Type2,
"date" :{
"day1" : 4,
"day2" : 5,
"day3" : 6
},
"a" : test2
}
如何對日期中的值求和,以便輸出 (totalDate) 如下:
{
"type": Type1,
"totalDate" : 6,
"date" :{
"day1" : 1,
"day2" : 2,
"day3" : 3
},
"a" : test
},
{
"type": Type2,
"totalDate" : 15,
"date" :{
"day1" : 4,
"day2" : 5,
"day3" : 6
},
"a" : test2
}
Map
, pluck
, sum
(mule 4), reduce
(mule 3):
假設您的輸入是這樣的數組:
[
{
"type": "Type1",
"date" :{
"day1" : 1,
"day2" : 2,
"day3" : 3
},
"a" : "test"
},
{
"type": "Type2",
"date" :{
"day1" : 4,
"day2" : 5,
"day3" : 6
},
"a" : "test2"
}
]
編輯:
在 dataweave 1.0 中,我會這樣做:
注意:即使在 mule 應用程序中,輸入行也是有效的。 將其作為錯誤進行編輯是不正確的,即使通常沒有必要。 只是想避免該編輯中的一些錯誤信息,因為有時有完全有效的理由來定義您的輸入。 據我所知,他正在讀取文件並且沒有設置 mime 類型。 通過保留該行,它仍將正確處理。
當 DataWeave 執行本身被上下文化並且輸入從所述上下文派生時,在某些情況下不需要輸入指令。 例如,在 Mule 中,他們的事件概念提供了上下文,添加了負載和變量等輸入,以及它們各自的 MIME 類型信息。 在本節之后,我們將避免使用 input 指令,並在本教程的其余部分中假設一個名為 payload 的輸入。
更多信息在這里:
https://docs.mulesoft.com/mule-runtime/3.9/dataweave-reference-documentation#document-structure
https://docs.mulesoft.com/mule-runtime/3.9/dataweave-reference-documentation#input-directive
%dw 1.0
%input payload application/json
%output application/json
---
payload map {
($),
totalDate: ($.date pluck $) reduce $+$$
}
唯一的區別是我不依賴 sum,因為它不是我可用的函數。 reduce $+$$
意味着我將累加器默認為數組中的第一個數字,然后將之后的每個數字添加到它。 這實際上也是 3.9 文檔建議這樣做的方式: https : //docs.mulesoft.com/mule-runtime/3.9/dataweave-operators#reduce以獲得更詳細的解釋。
我們可以映射每個對象。 我們創建一個新對象,然后使用($)
將現有對象解構到其中。 從那里,我們創建一個新字段,它將通過從日期對象 ( $.date pluck $
) 中$.date pluck $
所有值來填充,然后將其轉換為sum
。
%dw 2.0
output application/json
---
payload map {
($),
totalDate: sum($.date pluck $)
}
邁克爾的答案也可以修改為......
%dw 2.0
output application/json
---
payload map ((value, index) ->
{
(value),
totalDate: sum(valuesOf(value.date))
}
)
只是另一種方式來做到這一點
%dw 2.0
output application/json
---
payload map (v0,k0) ->
{
(v0 ++ (totalDate:(v0.date pluck $) reduce(item,acc) -> item + acc))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.