1

我目前正在下载大量 jira 问题以生成报告。目前,“完整数据”文件有大量单独的记录,如下所示:

{
    "key": "645",
    "type": "Bug",
    "typeid": "1",
    "status": "Closed",
    "summary": "Crash when saving document",
    "closedDate": "2014-10-03T09:01:23.000+0200",
    "flag": null,
    "fixVersionID": "123",
    "fixVersionName": "2.7"
}

但是,因为我要下载多个版本并附加到同一个文件,所以我最终得到了这种结构。

[
  {
    "key": "645",
    "type": "Bug",
    "typeid": "1",
    "status": "Closed",
    "summary": "Crash when saving document",
    "closedDate": "2014-10-03T09:01:23.000+0200",
    "flag": null,
    "fixVersionID": "123",
    "fixVersionName": "2.7"
  }
]
[
  {
    "key": "552",
    "type": "Bug",
    "typeid": "1",
    "status": "Closed",
    "summary": "Graphical Issue",
    "closedDate": "2014-10-13T09:01:23.000+0200",
    "flag": null,
    "fixVersionID": "456",
    "fixVersionName": "2.8"
  }
]

我想要做的是计算具有特定日期的记录数,然后使用jq从开始日期到结束日期进行相同的循环

但是,我不知道如何:

  1. 展平记录,使它们是一个数组而不是两个
  2. T09:01:23.000+0200从 closedDate 值中剥离
  3. 计算具有特定日期值的对象的数量,例如2014-10-13
4

2 回答 2

1

您有多个独立的输入。为了能够以任何有意义的方式将它们组合起来,您必须大量输入。输入将被视为输入数组。add然后你可以通过ing将它们组合成一个数组。

由于日期都采用某种固定格式,因此您可以获取日期的子字符串。

"2014-10-13T09:01:23.000+0200"[:10] -> "2014-10-13"

鉴于此,您可以按您想要的日期进行过滤并使用length过滤器进行计数。

add | map(select(.closedDate[:10]=="2014-10-13")) | length

例如,

$ cat input.json
[
  {
    "key": "645",
    "type": "Bug",
    "typeid": "1",
    "status": "Closed",
    "summary": "Crash when saving document",
    "closedDate": "2014-10-03T09:01:23.000+0200",
    "flag": null,
    "fixVersionID": "123",
    "fixVersionName": "2.7"
  }
]
[
  {
    "key": "552",
    "type": "Bug",
    "typeid": "1",
    "status": "Closed",
    "summary": "Graphical Issue",
    "closedDate": "2014-10-13T09:01:23.000+0200",
    "flag": null,
    "fixVersionID": "456",
    "fixVersionName": "2.8"
  }
]
$ jq -s 'add | map(select(.closedDate[:10]=="2014-10-13")) | length' input.json
1
于 2015-02-12T08:33:12.667 回答
1

对于问题 1 和 2:

$ echo -e "[\n$(sed '/^[][]$/d;/closedDate/s/\(T[^"]*\)//g' json)\n]" > flat-json

要计算特殊日子的数量:

$ grep "closedDate" flat-json | grep "2014-10-13" | wc -l
于 2015-02-12T10:59:20.950 回答