json 使用jq从GitHub API获取每个返回的repo需要编辑的文件列表

l5tcr1uw  于 9个月前  发布在  Git
关注(0)|答案(1)|浏览(190)

我尝试使用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做到这一点呢?我试图寻找解决方案,但如何表达我试图做的事情却让我不知所措。

wfypjpf4

wfypjpf41#

您甚至可以使用reduce而不是Map将所有内容收集到一个对象中:

gh … | jq 'reduce .items[] as $i ({}; .[$i.repository.full_name] += [$i.path])'

个字符
如果你想拥有一个单独的、单字段对象的数组,追加to_entries | map([.] | from_entries)来排序它们。

相关问题