我想使用jq在json下面的aggregations.domains.buckets数组中添加一个字段,并返回带有新字段的完整json?我想添加{" cost":122.45},其中为每个密钥动态计算成本..
diltn
这是我的剧本:
1056.914
但它只返回json,只添加了最后一个字段。如何动态更新json?
提前致谢。
答案 0 :(得分:1)
如果成本是输入JSON的函数,那么您使用的方法将遵循以下过滤器的方法,这只会增加{" cost":null}:
.aggregations.domains.buckets |= map( . + {cost} )
如果成本取决于key
根据其他一些标准,则最好构造一个JSON字典,将键映射到成本,然后将该字典传递给jq,并合并结果使用以下所示的技术:
Combining JSON by common key-value pairs
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"
}
]
}
}
}