У меня есть следующий json, который я хочу отсортировать:
{
"unbonding_responses": [
{
"delegator_address": "tori1zkzfu5tqee0p698w3g83x8a2zswgqglj4t8z3j",
"validator_address": "torivaloper189r2mx8h5zt7ep4cf0s4np79w38l420na3h6sa",
"entries": [
{
"creation_height": "753019",
"completion_time": "2022-12-13T16:00:56.664864370Z",
"initial_balance": "3000000",
"balance": "3000000"
}
]
},
{
"delegator_address": "tori1rjg0vg9hlu8kygnrdehzt3z0t4ea5ssu6wkm06",
"validator_address": "torivaloper189r2mx8h5zt7ep4cf0s4np79w38l420na3h6sa",
"entries": [
{
"creation_height": "653923",
"completion_time": "2022-12-07T00:53:48.247870844Z",
"initial_balance": "50000000",
"balance": "50000000"
}
]
},
{
"delegator_address": "tori1aw44evl5zlqtw93zln83tp4v3w4kp6e9zmx64k",
"validator_address": "torivaloper189r2mx8h5zt7ep4cf0s4np79w38l420na3h6sa",
"entries": [
{
"creation_height": "597161",
"completion_time": "2022-12-03T05:32:59.107845572Z",
"initial_balance": "2000000",
"balance": "2000000"
}
]
}
],
"pagination": {
"next_key": null,
"total": "3"
}
}
В настоящее время я фильтрую, используя следующую команду
curl -s https://rest.mainnet.teritori.com/cosmos/staking/v1beta1/validators/torivaloper1qy38xmcrnht0kt5c5fryvl8llrpdwer6atxj5u/unbonding_delegations | jq '.unbonding_responses[].entries[]|.balance|=(tonumber | ./1000000)'
Что дает следующие результаты:
{
"creation_height": "546726",
"completion_time": "2022-11-29T20:41:54.102529873Z",
"initial_balance": "1000000",
"balance": 1
}
{
"creation_height": "560257",
"completion_time": "2022-11-30T18:22:32.286053755Z",
"initial_balance": "4000000",
"balance": 4
}
{
"creation_height": "567462",
"completion_time": "2022-12-01T05:57:49.397647828Z",
"initial_balance": "112142",
"balance": 0.112142
}
Я экспериментировал с картой и выбрал, чтобы попытаться получить результаты в формате, который я ищу, но безуспешно. Две вещи, которые я хочу сделать, это удалить initial_balance
, а затем добавить delegator_address
к результатам.
Желаемый результат, чтобы я мог легко преобразовать в CSV и импортировать в электронную таблицу:
{
"delegator_address": "tori1zkzfu5tqee0p698w3g83x8a2zswgqglj4t8z3j",
"creation_height": "546726",
"completion_time": "2022-11-29T20:41:54.102529873Z",
"balance": 1
}
{
"delegator_address": "tori1rjg0vg9hlu8kygnrdehzt3z0t4ea5ssu6wkm06",
"creation_height": "560257",
"completion_time": "2022-11-30T18:22:32.286053755Z",
"balance": 4
}
{
"delegator_address": "tori1aw44evl5zlqtw93zln83tp4v3w4kp6e9zmx64k",
"creation_height": "567462",
"completion_time": "2022-12-01T05:57:49.397647828Z",
"balance": 0.112142
}
Вы можете создать свой вывод с нуля:
.unbonding_responses[]
| { delegator_address }
+ (.entries[] | {
creation_height,
completion_time,
balance: (.balance|tonumber/1000000)
})
или объединить полные объекты записей с адресом делегатора, а затем удалить ненужное свойство + нормализовать свой баланс:
.unbonding_responses[]
| { delegator_address } + .entries[]
| del(.initial_balance)
| .balance |= tonumber/1000000
Вывод для обеих программ:
{
"delegator_address": "tori1zkzfu5tqee0p698w3g83x8a2zswgqglj4t8z3j",
"creation_height": "753019",
"completion_time": "2022-12-13T16:00:56.664864370Z",
"balance": 3
}
{
"delegator_address": "tori1rjg0vg9hlu8kygnrdehzt3z0t4ea5ssu6wkm06",
"creation_height": "653923",
"completion_time": "2022-12-07T00:53:48.247870844Z",
"balance": 50
}
{
"delegator_address": "tori1aw44evl5zlqtw93zln83tp4v3w4kp6e9zmx64k",
"creation_height": "597161",
"completion_time": "2022-12-03T05:32:59.107845572Z",
"balance": 2
}
Это очень полезно.
+.entries[]....
и следующие за ним — это то, что я не уловил. Я добавил его в фигурные скобки и пытался понять, как фильтровать там, но, очевидно, ошибся. Большое спасибо!