使用JQ的多个语句:累积多个字段

问题描述

这是此示例的数据:

[
  {
    "date": "25-09-20","nbrMembers": 1,"nbrWallets": 4
  },{
    "date": "26-09-20","nbrMembers": 3,"nbrWallets": 1
  },{
    "date": "27-09-20","nbrMembers": 0,"nbrWallets": 2
  },{
    "date": "28-09-20","nbrMembers": 7,"nbrWallets": 3
  }
]

我需要使用累积字段来转换json。 这是预期的结果:

[
  {
    "date": "25-09-20","nbrMembers": 4,"nbrWallets": 5
  },"nbrWallets": 7
  },"nbrMembers": 11,"nbrWallets": 10
  }
]

这就是我要累计的一个字段:

jq 'foreach .[] as $row (0; . + $row.nbrMembers ; . as $x | $row | (.nbrMembers = $x))' test.json

我只是不知道如何使用多个字段?

解决方法

您可以使用整个对象,而不仅仅是字段作为 foreach 中的当前元素。

jq '[foreach .[] as $row ({nbrMembers: 0,nbrWallets: 0}; {nbrMembers: ($row.nbrMembers + .nbrMembers),nbrWallets:  ($row.nbrWallets + .nbrWallets)  }; . as $x | $row | .nbrMembers = $x.nbrMembers | .nbrWallets = $x.nbrWallets) ]' test.json
,

它是短一些的版本。我们可以使用$row * .合并结果)


jq '[foreach .[] as $row (
      {nbrMembers: 0,nbrWallets: 0};
      { 
        nbrMembers: ($row.nbrMembers + .nbrMembers),nbrWallets: ($row.nbrWallets + .nbrWallets)
      }; 
     $row * .  
    )]' test.json
,

简洁地:

jq '[ foreach .[] as $row (null;
          .nbrMembers += $row.nbrMembers
        | .nbrWallets += $row.nbrWallets;
        $row + . ) ]
' test.json

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...