我有这个脚本:
curl -sX 'GET' \
'https://api.coingecko.com/api/v3/exchange_rates' \
-H 'accept: application/json' | jq -rc '.[]|select(.)|keys,(.[].value|tostring)'
JSON 的来源为:
{
"rates": {
"btc": {
"name": "Bitcoin",
"unit": "BTC",
"value": 1,
"type": "crypto"
},
"eth": {
"name": "Ether",
"unit": "ETH",
"value": 14.327,
"type": "crypto"
}, ...
我无法创建键(硬币 ID,“btc”)-值(硬币价值,“1”)对,我需要的是硬币的 ID 及其价值:
btc 1
eth 14.327
我怎样才能将这两个独立的数组合并为一个?
答案1
你能使用to_entries
过滤器获取配对。它将字典转换为项目数组:
$ curl <url> | jq ".rates | to_entries"
[
{
"key": "btc",
"value": {
"name": "Bitcoin",
"unit": "BTC",
"value": 1,
"type": "crypto"
}
},
{
"key": "eth",
"value: {...}
},
},
{ ... }
]
一旦您有了这样的条目,您就可以访问每个项目的.key
和.value.value
以获取您想要的对:
$ curl <url> | jq '.rates | to_entries | .[] | [.key, .value.value]'
["btc", 1]
["eth", 14.376]
[...]
将它们转换为字符串也是一样:
$ curl <url> | jq -r '.rates | to_entries | .[] | "\(.key) \(.value.value)"'
btc 1
eth 14.368
...
请注意,select(.)
您之前所拥有的似乎完全是多余的......