这个问题在这里已有答案:
整个档案:https://1drv.ms/u/s!AizscpxS0QM4hJpEkp12VPHiKO_gBg
使用此命令我得到一部分(获得最新工作)
jq '.|[ .executions[] | select(.job.name != null) | select(.job.name) ]
| sort_by(.id)
| reverse
| .[0] ' 1.json
{
"argstring": null,
"date-ended": {
"date": "2018-04-03T17:43:38Z",
"unixtime": 1522777418397
},
"date-started": {
"date": "2018-04-03T17:43:34Z",
"unixtime": 1522777414646
},
"description": "",
"executionType": "user",
"failedNodes": [
"172.30.61.88"
],
"href": "http://172.30.61.88:4440/api/21/execution/126",
"id": 126,
"job": {
"averageDuration": 4197,
"description": "",
"group": "",
"href": "http://172.30.61.88:4440/api/21/job/271cbcec-5042-4d52-b794-ede2056b2ab8",
"id": "271cbcec-5042-4d52-b794-ede2056b2ab8",
"name": "aa",
"permalink": "http://172.30.61.88:4440/project/demo/job/show/271cbcec-5042-4d52-b794-ede2056b2ab8",
"project": "demo"
},
"permalink": "http://172.30.61.88:4440/project/demo/execution/show/126",
"project": "demo",
"status": "failed",
"user": "administrator"
我设法提取工作名称和状态,现在想获得date-ended.date?
jq '.|[ .executions[] |select(.job.name != null) | select(.job.name) ]
| sort_by(.id)
| reverse
| .[0]
| "\(.status), \(.job.name)"' 1.json
使用“-r”命令行选项,可以使用以下过滤器:
[.executions[] | select(.job.name != null)]
| sort_by(.id)
| reverse
| .[0]
| [.status, .job.name, ."date-ended".date]
| @csv
生产:
"failed","aa","2018-04-03T17:43:38Z"
您可能错过的重要一点是“ - ”是一个“特殊”字符,因为它可以表示否定或减法。
如果你的jq不支持语法."date-ended".date
,那么你可以回到基本语法:(.["date-ended"] | .date)
我猜你有麻烦提取.date-ended.date
,因为该名称包含一个由jq
解释为减法的破折号。
解决方案列在documentation中:
如果键包含特殊字符,则需要用双引号将其括起来:
."foo$"
,否则.["foo$"]
。
这意味着你的jq
程序的最后一个过滤器应该是:
"\(.status), \(.job.name), \(."date-ended".date)"