Как мне суммировать произвольно вложенные значения с помощью jq? - PullRequest
0 голосов
/ 14 сентября 2018

Я изо всех сил пытался придумать способ суммировать произвольно вложенные поля с 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
   }
]

Спасибо!

1 Ответ

0 голосов
/ 14 сентября 2018

После исправления вашего JSON запрос:

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

дает 1099.

(Этот запрос является надежным при наличии ключа "avg_amount", как обрабатывает addnull как 0.)

hjson

Если исправление JSON является проблемой, вы можете (например) использовать hjson -j.См https://hjson.org/

...