使用 jq 获取返回的每个存储库需要从 github api 编辑的文件列表

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

我正在尝试使用

gh
查询 github api,并使用返回的 json 为我提供与我的搜索匹配的存储库列表,并且针对每个存储库,我想要一个需要编辑的文件名列表。

我可以像这样从 API 获取存储库列表:

gh api --method=GET "search/code?q=some-specific-string" | jq -r '[.items[] | { ( .repository.full_name ) :  .path}]'

这给了我这样的结果:

[
  {
    "org-name/helm-charts": [
      "README.md"
    ]
  },
  {
    "org-name/repo-name": [
      "file-name-1.py"
    ]
  },
  {
    "org-name/repo-name": [
      "file-name-2.py"
    ]
  }
]

我正在尝试找到正确的方法来获取结果并合并它们,以便不存在重复的存储库名称,并且它们的列表被连接起来。所以我得到的结果如下:

[
  {
    "org-name/helm-charts": [
      "README.md"
    ]
  },
  {
    "org-name/repo-name": [
      "file-name-1.py",
      "file-name-2.py"
    ]
  }
]

我该如何用 jq 做到这一点?我正在尝试寻找解决方案,但我无法表达我想要做的事情

jq github-api gh
1个回答
0
投票

您甚至可以使用

将所有内容收集到一个对象中
gh … | jq 'reduce .items[] as $i ({}; .[$i.repository.full_name] += [$i.path])'
{
  "org-name/helm-charts": [
    "README.md"
  ],
  "org-name/repo-name": [
    "file-name-1.py",
    "file-name-2.py"
  ]
}

如果您想要单独的单字段对象,请附加

to_entries | map([.] | from_entries)
对它们进行排序。

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