这里是Json
{
"users": [
{
"first": "Stevie",
"last": "Wonder"
},
{
"first": "Michael",
"last": "Jackson"
}
]
}
使用jq,我想连续显示姓和名。就像这样
Stevie Wonder
Michael Jackson
这就是我得到的结果
jq '.users[].first, .users[].last'
但是它显示
"Stevie"
"Michael"
"Wonder"
"Jackson"
注意以下几点:
我不想要的双引号。
我不想要的马车回来了。
这是混乱的。我的查询首先显示所有的姓,然后显示所有的姓。但是,我想要倒数第一,倒数第一的一双。
虽然以上两个答案都工作得很好,如果键,值是字符串,我有一个附加字符串和整数的情况(jq错误使用上述表达式)
要求:在json下面构造一个url
pradeep@seleniumframework>curl http://192.168.99.103:8500/v1/catalog/service/apache-443 | jq .[0]
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 251 100 251 0 0 155k 0 --:--:-- --:--:-- --:--:-- 245k
{
"Node": "myconsul",
"Address": "192.168.99.103",
"ServiceID": "4ce41e90ede4:compassionate_wozniak:443",
"ServiceName": "apache-443",
"ServiceTags": [],
"ServiceAddress": "",
"ServicePort": 1443,
"ServiceEnableTagOverride": false,
"CreateIndex": 45,
"ModifyIndex": 45
}
解决方案:
curl http://192.168.99.103:8500/v1/catalog/service/apache-443 |
jq '.[0] | "http://" + .Address + ":" + "\(.ServicePort)"'
除了别人提出的建议之外,我认为有两个选择值得一提。
打印为CSV/TSV
$ cat file.json | jq -r '.users[] | [.first, .last] | @tsv'
Stevie Wonder
Michael Jackson
cat file.json | jq -r '.users[] | [.first, .last] | @csv'
"Stevie","Wonder"
"Michael","Jackson"
第一个表达式.users[]像问题中给出的代码一样,从最外层数组中解嵌套对象。下一个表达式,[。首先,.last]为每个输入对象创建一个新的值数组,最后的表达式使用内置函数@tsv和@csv分别以制表符分隔的值和逗号分隔的值打印所有输入数组。
打印为JSON值
类似地,可以再次构造JSON值,如果你只想保留字段的一个子集,这很有趣:
$ cat file.json | jq -c '.users[] | {first}'
{"first":"Stevie"}
{"first":"Michael"}
我的方法将是(你的json例子不是很好形成..我猜这只是一个样本)
jq '.Front[] | [.Name,.Out,.In,.Groups] | join("|")' front.json > output.txt
返回如下内容
"new.domain.com-80|8.8.8.8|192.168.2.2:80|192.168.3.29:80 192.168.3.30:80"
"new.domain.com -443|8.8.8.8|192.168.2.2:443|192.168.3.29:443 192.168.3.30:443"
并用正则表达式对输出进行grep。