在同一文件中合并多个 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
从开始日期到结束日期进行相同的循环
但是,我不知道如何:
- 展平记录,使它们成为一个数组而不是两个
- 从 closedDate 值
中删除 T09:01:23.000+0200
- 计算
2014-10-13
等具有特定日期值的对象的数量
您有多个独立的输入。为了能够以任何有意义的方式组合它们,您必须吸收输入。输入将被视为输入数组。然后,您可以通过 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
问题 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
我目前正在下载大量 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
从开始日期到结束日期进行相同的循环但是,我不知道如何:
- 展平记录,使它们成为一个数组而不是两个
- 从 closedDate 值 中删除
- 计算
2014-10-13
等具有特定日期值的对象的数量
T09:01:23.000+0200
您有多个独立的输入。为了能够以任何有意义的方式组合它们,您必须吸收输入。输入将被视为输入数组。然后,您可以通过 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
问题 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