在同一文件中合并多个 json 数组

Merging multiple json arrays in the same file

我目前正在下载大量 jira 问题以生成报告。目前 'full data' 文件有大量这样的单独记录:

{
    "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. 从 closedDate 值
  3. 中删除 T09:01:23.000+0200
  4. 计算2014-10-13
  5. 等具有特定日期值的对象的数量

您有多个独立的输入。为了能够以任何有意义的方式组合它们,您必须吸收输入。输入将被视为输入数组。然后,您可以通过 adding 将它们组合成一个数组。

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

"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

问题 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