使用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" 

注意以下几点 –

  1. 双引号,我不想要的。
  2. 回车,我不想要。
  3. 它混乱了。 我的查询首先显示所有的名字,然后显示所有的姓氏。 不过,我想要第一个,也是最后一个。

我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的一个子集)