Ответ 1
Я рекомендую использовать String Interpolation:
jq '.users[] | "\(.first) \(.last)"'
У меня есть Json
{
"users": [
{
"first": "Stevie",
"last": "Wonder"
},
{
"first": "Michael",
"last": "Jackson"
}
]
}
Используя jq, я хотел бы отображать имя и фамилию серийно. Так же -
Stevie Wonder
Michael Jackson
Вот как далеко я получил -
jq '.users[].first, .users[].last'
Но он отображает
"Stevie"
"Michael"
"Wonder"
"Jackson"
Обратите внимание на следующее:
Я рекомендую использовать String Interpolation:
jq '.users[] | "\(.first) \(.last)"'
Вы можете использовать addition для конкатенации строк.
Строки добавляются путем объединения в большую строку.
jq '.users[] | .first + " " + .last'
Хотя оба вышеупомянутых ответа хорошо работают, если ключ, значение - это строки, у меня была ситуация, чтобы добавить строку и целое число (ошибки jq, используя приведенные выше выражения)
Требование: Чтобы создать URL-адрес ниже json
[email protected]>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 для меня, чтобы обычно импортировать его в другие инструменты без особых проблем. (Я все еще ищу способ basicallt экспортировать подмножество ввода json)
Это произведет массив имен
> jq '[ .users[] | (.first + " " + .last) ]' ~/test.json
[
"Stevie Wonder",
"Michael Jackson"
]
jq '.users[]|.first,.last' | paste - -