jq:错误(在 report.json:32):无法使用字符串"complianceId"索引字符串



我正试图通过jq解析json文件的CSV输出。

Json看起来是这样的:

{
"report": {
"id": "xxx-xxxxx-xxxx",
"machineId": "xxx-xxxxx-xxxx",
"scanDate": "2020-12-03T09:11:28Z",
"moduleReports": {
"COMPLIANCE": {
"complianceCheckVersion": "1.3.1",
"items": [
{
"complianceId": "Report_ID1",
"title": "Title of Report ID1",
"status": "FULFILLED",
"requirementSourceType": "ABC"
},
{
"complianceId": "Report_ID2",
"title": "Title of Report ID2",
"status": "FULFILLED",
"requirementSourceType": "ABC"
},
{
"complianceId": "Report_ID3",
"title": "Title of Report ID3",
"status": "FULFILLED",
"requirementSourceType": "DEF"
}
]
}
}
}
}

我想进行分析,这样只有键requirementSourceType和值的结果才是ABCDEF应过滤掉。

过滤没有问题,目前它是用这个命令完成的:

jq -r '.report | .moduleReports | .COMPLIANCE | .items[] | select(.requirementSourceType=="CIS")' report.json

但是,当我试图为CSV报告创建一个唯一的列时,使用以下命令输出:

jq -r '.report | .moduleReports | .COMPLIANCE | .items[] | select(.requirementSourceType=="CIS") | map({complianceId, title, status}) | (map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv' report.json

我得到这个错误:

jq:error(在report.json:32处(:无法用字符串"对字符串进行索引;complianceId";

有什么方法可以修复这个错误吗?

我试图研究这样一个解决方案,但没能找到类似的情况。

谢谢。

编辑

预期CSV输出:

"complianceId","status","title"
"Report_ID1","FULFILLED","Title of Report ID1"
"Report_ID2","FULFILLED","Title of Report ID2"
"Report_ID3","FULFILLED","Title of Report ID3"

我不确定您期望得到什么输出。这对你有用吗?

jq -r '[
.report.moduleReports.COMPLIANCE.items[]
| select(.requirementSourceType=="CIS")
| [.complianceId, .title, .status]
] | unique | .[] | @csv' report.json

最新更新