【发布时间】:2021-03-15 12:49:57
【问题描述】:
我正在尝试通过 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"
}
]
}
}
}
}
我想解析,所以只有 key requirementSourceType 和 value 的结果只有 ABC。 DEF 应该被过滤掉。
过滤没有问题,目前是用这个命令完成的:
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:错误(在 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"
【问题讨论】:
-
你期望什么输出?
-
帖子更新为预期输出。