首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSONata (或JS) -组和JSON数组/对象

JSONata (或JS) -组和JSON数组/对象
EN

Stack Overflow用户
提问于 2018-12-22 12:31:07
回答 2查看 1.8K关注 0票数 0

我希望使用JSONata对一个对象数组进行“群和”,它来自以下数组:

代码语言:javascript
复制
payload = [
 {"id":"Irr-1","name":"Irrigation","timedif_s":7.743},
 {"id":"Irr-2","name":"Irrigation","timedif_s":2.749},
 {"id":"Lig-2","name":"Lights","timedif_s":1.475},
 {"id":"Irr-1","name":"Irrigation""timedif_s":1.07},]

结果必须如下所示:

代码语言:javascript
复制
[{"name":"Irrigation", "sumtimedif": 11.562},
 {"name":"Lig-1", "sumtimedif": 1.475}]

我试过:

代码语言:javascript
复制
payload.name{"name":payload.name,"sumtimedif":$sum(timedif_s)}

但我只得到了一根空的绳子。

代码语言:javascript
复制
{ empty }

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-24 08:58:19

下面的JSONata表达式将执行此操作:

代码语言:javascript
复制
payload{
  name: $sum(timedif_s)  /* group by name */
} ~> $each(function($v, $k) {
 {"name": $k, "sumtimedif": $v}  /* transform each key/value pair */
})

表达式的第一部分进行分组和聚合,第二部分将每个组(键/值对)转换为所需的格式。http://try.jsonata.org/ByxzyQ0x4

票数 2
EN

Stack Overflow用户

发布于 2018-12-22 20:45:31

我发现了另一个对我有帮助的好帖子:Most efficient method to groupby on a array of objects

不确定这是否可以在JSONata中完成,因此我返回到JS,如下所示:

代码语言:javascript
复制
var arr = msg.payload ;
arr1 = groupBy(arr, 'name', 'timedif_s' ) ;
msg.payload = arr1 ;
return msg;
//---------------------------------------------
function groupBy(array, col, value) {
    var r = [], o = {};
    array.forEach(function (a) {
        if (!o[a[col]]) {
            o[a[col]] = {};
            o[a[col]][col] = a[col];
            o[a[col]][value] = 0;
            r.push(o[a[col]]);
        }
        o[a[col]][value] += +a[value];
    });
    return r;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53895674

复制
相关文章

相似问题

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