[英]How do I use jq to convert nested JSON output to CSV?
I have a JSON output that I receive from cURL, I would like to pipe to jq to extract useful information and display the csv data in a terminal.
樣品 JSON 響應:
{
"operation": "GET CLIENT SESSIONS",
"outcome": "SUCCESS",
"result": {
"Session": [
{
"sessionID": "E1B7190EF32AA9F6E63265ADBB88D1A9D6F4254457A0.production",
"requestID": "",
"sessionPoolID": "8LNIVzRTSo-jJV-CdPMP0Q",
"agentID": "",
"ablSessionID": "",
"lastAccessStr": "2022-04-01T10:36:14.745-0700",
"elapsedTimeMs": 1675892,
"sessionState": "AVAILABLE",
"requestState": "READY",
"sessionType": "SESSION_FREE",
"adapterType": "APSV",
"bound": false,
"clientConnInfo": null,
"agentConnInfo": null
},
{
"sessionID": "E1B7190EF32AA9F6E63265ADBB88D1A9D6F4254457A0.production",
"requestID": "",
"sessionPoolID": "8LNIVzRTSo-jJV-CdPMP0Q",
"agentID": "",
"ablSessionID": "",
"lastAccessStr": "2022-04-01T10:36:14.745-0700",
"elapsedTimeMs": 1675892,
"sessionState": "AVAILABLE",
"requestState": "READY",
"sessionType": "SESSION_FREE",
"adapterType": "APSV",
"bound": false,
"clientConnInfo": null,
"agentConnInfo": null
}
]
},
"errmsg": "",
"versionStr": "v1.0.0 ( 2021-10-29 )",
"versionNo": 1
}
我可以使用此查詢提取信息:
jq '.result.Session[] | ([.lastAccessStr, .elapsedTimeMs, .clientConnInfo]) | @csv'
我遇到的問題,有時響應可能包含 clientConnInfo 和 agentConnInfo 的其他嵌套數據,如下例所示。
{
"operation": "GET CLIENT SESSIONS",
"outcome": "SUCCESS",
"result": {
"Session": [
{
"sessionID": "E1B7190EF32AA9F6E63265ADBB88D1A9D6F4254457A0.production",
"requestID": "",
"sessionPoolID": "8LNIVzRTSo-jJV-CdPMP0Q",
"agentID": "",
"ablSessionID": "",
"lastAccessStr": "2022-04-01T10:36:14.745-0700",
"elapsedTimeMs": 1675892,
"sessionState": "AVAILABLE",
"requestState": "READY",
"sessionType": "SESSION_FREE",
"adapterType": "APSV",
"bound": false,
"clientConnInfo": null,
"agentConnInfo": null
},
{
"sessionID": "26691913A73E55175D233F86D219B4AEFA4AD14AE9E4.production",
"requestID": "ROOT:a:000002a6",
"sessionPoolID": "8LNIVzRTSo-jJV-CdPMP0Q",
"agentID": "qsrLXAxsRRanJio6dYOC2Q",
"ablSessionID": "",
"lastAccessStr": "2022-04-01T11:04:08.902-0700",
"elapsedTimeMs": 1735,
"sessionState": "RESERVED",
"requestState": "RUNNING",
"sessionType": "SESSION_FREE",
"adapterType": "APSV",
"bound": false,
"clientConnInfo": {
"clientName": "xxxxx",
"requestID": "ROOT:a:000002a6",
"sessionID": "26691913A73E55175D233F86D219B4AEFA4AD14AE9E4.production",
"adapterType": "APSV",
"reqStartTimeStr": "2022-04-01T11:04:08.902-0700",
"elapsedTimeMs": 1735,
"executerThreadId": "thd-8",
"requestUrl": "xxxxx",
"requestProcedure": "xxxxx.p",
"httpSessionId": "26691913A73E55175D233F86D219B4AEFA4AD14AE9E4.production"
},
"agentConnInfo": {
"agentID": "qsrLXAxsRRanJio6dYOC2Q",
"connID": "AR2k7gnYSiKPCk2DEHpaSg",
"connPoolID": "v0Lh7XcITsOSfoF_RjXXig",
"state": "RESERVED",
"agentAddr": "xxxxx",
"localAddr": "xxxxx"
}
}
]
},
"errmsg": "",
"versionStr": "v1.0.0 ( 2021-10-29 )",
"versionNo": 1
}
如果我嘗試使用相同的查詢,它會因以下錯誤而死:
jq: error (at <stdin>:0): object ({"clientNam...) is not valid in a csv row
所需的 output 是為了捕獲這個:
.lastAccessStr.elapsedTimeMs.clientName(如果在輸出中可用).requestID(如果在輸出中可用).agentAddr(如果在輸出中可用).localAddr(如果在輸出中可用)
我一直在嘗試使用https://jqplay.org來完成這項工作,但沒有任何運氣。
誰能給我一些例子,說明我將如何讓 go 完成這項工作?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.