如何使用jq对任意嵌套值求和?

问题描述 投票:1回答:1

我一直在努力想出一种用jq来任意嵌套字段的方法。 “桶”的级别因调用(不同级别的汇总字段)而异。那么我如何将以下片段中的所有avg_amount字段求和(理想情况下不对每个.buckets.[]进行硬编码)?

[
   {
      "buckets":[
         {
            "buckets":[
               {
                  "buckets":[
                     {
                        "avg_amount":25,
                     }
                  ],
                  "destination":"Apple"
               },
               {
                  "buckets":[
                     {
                        "avg_amount":74,
                     }
                  ],
                  "destination":"Google"
               }
            ],
            "vendor_name":"Vendor Bee"
         },
         {
            "buckets":[
               {
                  "buckets":[
                     {
                        "avg_amount":1000,
                     }
                  ],
                  "destination":""
               }
            ],
            "vendor_name":""
         }
      ],
      "company_id":1
   }
]

谢谢!

json nested sum jq
1个回答
2
投票

修复JSON后,查询:

jq '[.. | objects | .avg_amount] | add'

产量1099

(这个查询是健壮的w.r.t.关键字“avg_amount”的存在,因为addnull处理为0.)

hjson

如果手动修复JSON是一个问题,您可以(例如)使用hjson -j。见https://hjson.org/

© www.soinside.com 2019 - 2024. All rights reserved.