使用jq串行parsing和显示json中的多个字段
我有这个Json
{ "users": [ { "first": "Stevie", "last": "Wonder" }, { "first": "Michael", "last": "Jackson" } ] }
使用jq我想显示名字和姓氏连续。 像这样 –
Stevie Wonder Michael Jackson
这是我得到了多less –
jq '.users[].first, .users[].last'
但它显示
"Stevie" "Michael" "Wonder" "Jackson"
注意以下几点 –
- 双引号,我不想要的。
- 回车,我不想要。
- 它混乱了。 我的查询首先显示所有的名字,然后显示所有的姓氏。 不过,我想要第一个,也是最后一个。
我build议使用string插值:
jq '.users[] | "\(.first) \(.last)"'
参考
您可以使用添加来连接string。
string被join到一个更大的string中。
jq '.users[] | .first + " " + .last'
虽然上面的两个答案很好,如果键,值是string,我有一个情况追加一个string和整数(jq错误使用上述expression式)
要求:在json下创build一个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)"'
通过做这样的事情,我已经非常接近我想要的东西了
cat my.json | jq '.my.prefix[] | .primary_key + ":", (.sub.prefix[] | " - " + .sub_key)' | tr -d '"'
它的输出足够接近yaml我通常将其导入到其他工具没有太大的问题。 (我仍然在寻找一种方法来基本输出inputjson的一个子集)