gpt4 book ai didi

json - 使用 jq 删除嵌套数组的匹配/不匹配元素

转载 作者:行者123 更新时间:2023-12-02 04:27:01 25 4
gpt4 key购买 nike

我需要将声纳分析历史的结果拆分为单个文件。假设下面有一个起始输入,

    {
"paging": {
"pageIndex": 1,
"pageSize": 100,
"total": 3
},
"measures": [
{
"metric": "coverage",
"history": [
{
"date": "2018-11-18T12:37:08+0000",
"value": "100.0"
},
{
"date": "2018-11-21T12:22:39+0000",
"value": "100.0"
},
{
"date": "2018-11-21T13:09:02+0000",
"value": "100.0"
}
]
},
{
"metric": "bugs",
"history": [
{
"date": "2018-11-18T12:37:08+0000",
"value": "0"
},
{
"date": "2018-11-21T12:22:39+0000",
"value": "0"
},
{
"date": "2018-11-21T13:09:02+0000",
"value": "0"
}
]
},
{
"metric": "vulnerabilities",
"history": [
{
"date": "2018-11-18T12:37:08+0000",
"value": "0"
},
{
"date": "2018-11-21T12:22:39+0000",
"value": "0"
},
{
"date": "2018-11-21T13:09:02+0000",
"value": "0"
}
]
}
]
}

我如何使用 jq 来清理结果,以便它只保留每个元素的历史数组条目?所需的输出是这样的(output-20181118123808.json 用于对“2018-11-18T12:37:08+0000”进行分析):
{
"paging": {
"pageIndex": 1,
"pageSize": 100,
"total": 3
},
"measures": [
{
"metric": "coverage",
"history": [
{
"date": "2018-11-18T12:37:08+0000",
"value": "100.0"
}
]
},
{
"metric": "bugs",
"history": [
{
"date": "2018-11-18T12:37:08+0000",
"value": "0"
}
]
},
{
"metric": "vulnerabilities",
"history": [
{
"date": "2018-11-18T12:37:08+0000",
"value": "0"
}
]
}
]
}

我不知道如何只对子元素进行操作,同时保持父结构完好无损。 JSON 文件的命名将从 jq 实用程序外部处理。提供的样本数据将被分成 3 个文件。其他一些输入可以有可变数量的条目,有些可能高达 10000。谢谢。

最佳答案

这是一个使用 awk 的解决方案写入不同的文件。该解决方案假定每个度量的日期相同且顺序相同,但对不同日期的数量或不同度量的数量没有限制。

jq -c 'range(0; .measures[0].history|length) as $i
| (.measures[0].history[$i].date|gsub("[^0-9]";"")), # basis of filename
reduce range(0; .measures|length) as $j (.;
.measures[$j].history |= [.[$i]])' input.json |
awk -F\\t 'fn {print >> fn; fn="";next}{fn="output-" $1 ".json"}'

注释
awk的选择这里只是为了方便。

这种方法的缺点是,如果要整齐地格式化每个文件,则每个文件都需要额外运行 pretty-print (例如 jq)。因此,如果要求每个文件中的输出整齐,则可以为每个日期运行 jq 一次,从而避免后处理 ( awk) 步骤的需要。

如果措施的日期不是锁步的,那么仍然可以使用与上述相同的方法,但当然日期的收集和相应的措施必须不同。

输出

上面调用 jq 产生的前两行如下:
"201811181237080000"
{"paging":{"pageIndex":1,"pageSize":100,"total":3},"measures":[{"metric":"coverage","history":[{"date":"2018-11-18T12:37:08+0000","value":"100.0"}]},{"metric":"bugs","history":[{"date":"2018-11-18T12:37:08+0000","value":"0"}]},{"metric":"vulnerabilities","history":[{"date":"2018-11-18T12:37:08+0000","value":"0"}]}]}

关于json - 使用 jq 删除嵌套数组的匹配/不匹配元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53491351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com