簡體   English   中英

如何對json dataweave中的值求和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM