Если стоимость является функцией входного JSON, подход, который вы бы использовали, был бы похож на следующий фильтр, который просто добавляет {"cost": null}:
.aggregations.domains.buckets |= map( . + {cost} )
Если стоимость зависит от key
в соответствии с каким-либо другим критерием, то, вероятно, было бы лучше создать словарь JSON, отображающий ключи к стоимости, а затем передать этот словарь в jq и объединить результаты, используя Техника проиллюстрирована на:
Объединение JSON по общим парам ключ-значение
Решение с использованием vals.txt
program.jq:
.aggregations.domains.buckets |=
reduce range(0; $costs|length) as $i (.;
.[$i] += {cost: $costs[$i]} )
Если вы хотите, чтобы стоимость была числовой, вы должны написать:
{cost: $costs[$i]|tonumber } )
Вызов:
jq -f program.jq --argfile costs <(jq -Rs '
split("\n")|map(select(length>0))' vals.txt) input.json
Выход:
{
"aggregations": {
"domains": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "other",
"doc_count": 8679,
"environments": {
"value": 49
},
"cost": "1280.7631275949711"
},
{
"key": "CREATIVESandPREVIEWS",
"doc_count": 1235,
"environments": {
"value": 21
},
"cost": "2210.8813614145324"
},
{
"key": "Integration",
"doc_count": 65,
"environments": {
"value": 1
},
"cost": "3143.5814890583424"
},
{
"key": "devops",
"doc_count": 1,
"environments": {
"value": 1
},
"cost": "836.4116237582436"
},
{
"cost": "1280.7631275949711"
}
]
}
}
}