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