Добавление чисел, которые не в формате массива?Или как отфильтровать в массив, чтобы я мог подвести итог - PullRequest
0 голосов
/ 22 ноября 2018

В предыдущих версиях jq мне удавалось выполнить следующее:

cat pull_requests.json | jq '.data.organization.repositories.nodes[] | .pullRequests.totalCount | add'

На этом примере данных:

{
  "data": {
    "organization": {
      "repositories": {
        "nodes": [{
            "pullRequests": {
              "totalCount": 2
            }
          },
          {
            "pullRequests": {
              "totalCount": 8
            }
          },
          {
            "pullRequests": {
              "totalCount": 23
            }
          }
        ]
      }
    }
  }
}

И я получил бы правильный результат.

Но в настоящее время на jq-1.6 я получаю следующую ошибку:

jq: error (at <stdin>:24): Cannot iterate over number (2)

Из вывода без фильтра add я заметил, что это не массив:

➤ cat pull_requests.json | jq '.data.organization.repositories.nodes[] | .pullRequests.totalCount'
2
8
23

Итак, мой вопрос: как сложить эти числа?

Я также пытался привести его к массиву с помощью [.pullRequests.totalCount], но мне не удалось объединить, объединить, объединить массивы, чтобы получить окончательный счет.

1 Ответ

0 голосов
/ 22 ноября 2018

Вы ошибаетесь, полагая, что фильтр jq, как показано, раньше работал на JSON, как показано.

К счастью, есть два простых исправления:

[ .data.organization.repositories.nodes[]
  | .pullRequests.totalCount ]
| add

или:

.data.organization.repositories.nodes
| map(.pullRequests.totalCount)
| add

Использование sigma / 1

Другой вариант - использовать потоковую функцию суммирования:

def sigma(s): reduce s as $s (null; .+$s);

.data.organization.repositories.nodes
| sigma(.[].pullRequests.totalCount)
...