首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >json数据组织中的求和方法

json数据组织中的求和方法
EN

Stack Overflow用户
提问于 2021-06-28 14:25:22
回答 3查看 1.3K关注 0票数 0

(骡子软数据编织1.0)

我想把json中的二级对象和在一起。如果我有这个json值

代码语言:javascript
复制
{
    "type": Type1,
    "date" :{
        "day1" : 1,
        "day2" : 2,
        "day3" : 3
    },
    "a" : test
},
{
    "type": Type2,
    "date" :{
        "day1" : 4,
        "day2" : 5,
        "day3" : 6
    },
    "a" : test2
}

如何在date中求和值,以便输出(totalDate)类似于:

代码语言:javascript
复制
{
"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
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-28 14:32:15

Mapplucksum (骡子4),reduce (骡子3):

假设您的输入是这样的数组:

代码语言:javascript
复制
[
    {
        "type": "Type1",
        "date" :{
            "day1" : 1,
            "day2" : 2,
            "day3" : 3
        },
        "a" : "test"
    },
    {
        "type": "Type2",
        "date" :{
            "day1" : 4,
            "day2" : 5,
            "day3" : 6
        },
        "a" : "test2"
    }
]

编辑:

在数据编织1.0中,我会这样做:

注意:即使在mule应用程序中,输入行也是有效的。将此编辑为错误是不正确的,即使它通常是不必要的。只想避免编辑中的一些错误信息,因为有时有完全正确的理由定义您的输入。据我所知,他正在读取一个文件,并且没有设置mime类型。如果保留这一行,它仍将正确处理。

--在某些情况下,当DataWeave执行本身被上下文化并从所述上下文派生输入时,不需要输入指令。例如,在Mule中,他们的事件概念提供上下文,添加诸如有效负载和vars之类的输入,并提供各自的MIME类型信息。在本节之后,我们将避免输入指令,并在本教程的其余部分假设一个名为“有效负载”的输入。

这里有更多信息:

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

代码语言:javascript
复制
%dw 1.0
%input payload application/json
%output application/json
---
payload map {
  ($),
  totalDate: ($.date pluck $) reduce $+$$
}

唯一的区别是我不依赖和,因为它不是我可以使用的函数。reduce $+$$意味着我要将累加器默认为数组中的第一个数字,然后将其后的每个数字添加到其中。实际上,3.9个文档也建议这样做:https://docs.mulesoft.com/mule-runtime/3.9/dataweave-operators#reduce提供更详细的说明。

我们可以在每个物体上绘制地图。我们创建一个新对象,然后使用($)将现有对象解构到其中。在那里,我们创建了一个新的字段,它将通过从date对象($.date pluck $)中提取所有值来填充,然后将其抛到一个sum中。

代码语言:javascript
复制
%dw 2.0
output application/json
---
payload map {
    ($),
    totalDate: sum($.date pluck $)
}
票数 3
EN

Stack Overflow用户

发布于 2021-07-05 13:54:40

迈克尔的答案也可以修改为..。

代码语言:javascript
复制
%dw 2.0
output application/json
---
payload map ((value, index) -> 
    {
        (value),
        totalDate: sum(valuesOf(value.date))
    }
)
票数 0
EN

Stack Overflow用户

发布于 2021-07-26 18:22:41

只是另一种方法

代码语言:javascript
复制
%dw 2.0
output application/json
---
payload map (v0,k0) ->
{
    (v0 ++ (totalDate:(v0.date pluck $) reduce(item,acc) -> item + acc))
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68165096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档