在单行上从 jq 获取输出
Posted
技术标签:
【中文标题】在单行上从 jq 获取输出【英文标题】:Get outputs from jq on a single line 【发布时间】:2017-03-16 17:44:37 【问题描述】:我使用以下输出:https://***.com/a/40330344
(.issues[] | key, status: .fields.status.name, assignee: .fields.assignee.emailAddress)
输出:
"key": "SEA-739",
"status": "Open",
"assignee": null
"key": "SEA-738",
"status": "Resolved",
"assignee": "user2@mycompany.com"
但是我需要解析每一行,但就密钥组而言,很难确定哪个受让人是哪个密钥。这可以用jq做一排吗?
预期输出:
"key": "SEA-739", "status": "Open", "assignee": null
"key": "SEA-738", "status": "Resolved", "assignee": "user2@mycompany.com"
或
"SEA-739", "Open", null
"SEA-738", "Resolved", user2@mycompany.com
【问题讨论】:
【参考方案1】:-c
是您可能需要的
使用您在上面发布的输出,您可以进一步处理它:
jq -c 。输入给予;
"key":"SEA-739","status":"Open","assignee":null
"key":"SEA-738","status":"Resolved","assignee":"user2@mycompany.com"
或者你可以改变你原来的命令
来自
jq -r '(.issues[] | key, status: .fields.status.name, assignee: .fields.assignee.emailAddress)'到
jq -c '(.issues[] | key, status: .fields.status.name, assignee: .fields.assignee.emailAddress)'
【讨论】:
-c 的长版本是--compact-output 看到这个答案***.com/questions/42178636/…。似乎有时您必须运行两次查询:$ curl | jq -c '.[]' | jq -c '.[]'
@NeilG 这是一个数组深度问题,而不是格式问题。您给出的示例与运行 jq -c '.[][]'
相同【参考方案2】:
不完全是对长版问题的回答,但对于那些在谷歌上搜索 jq 以寻找其他单行输出格式的人:
$ jq -r '[.key, .status, .assignee]|@tsv' <<<'
"key": "SEA-739",
"status": "Open",
"assignee": null
"key": "SEA-738",
"status": "Resolved",
"assignee": "user2@mycompany.com"
'
SEA-739 Open
SEA-738 Resolved user2@mycompany.com
@sh
而不是@tsv
返回:
'SEA-739' 'Open' null
'SEA-738' 'Resolved' 'user2@mycompany.com'
此外,还有其他输出格式可以做一些事情,例如转义输出,如@html
,或对其进行编码,如@base64
。该列表可在 jq(1) 手册页的 Format strings and escaping 部分或在线 stedolan.github.io/jq/manual 中找到。
【讨论】:
@tsv
至关重要,没有它(或@sh
),我的输出中的每个值都在自己的行中。有帮助的答案!我在其他任何地方都找不到这个“字符串”版本(而不是 json 格式)。
非常有帮助!请注意,答案使用-r
进行正确输出。其他选项有@csv
、@text
、@base64
和转义选项,如@uri
、@html
。相关手册部分在这里:stedolan.github.io/jq/manual/#Formatstringsandescaping以上是关于在单行上从 jq 获取输出的主要内容,如果未能解决你的问题,请参考以下文章