使用JQ过滤GitHub API指定前缀仓库遇空结果问题
解决GitHub API结果的JQ过滤问题
问题分析与修正
你当前的核心问题是无法通过JQ过滤出名称以test-开头的仓库,主要是语法细节和转义字符导致的:
错误语法修正
你尝试的jq -r '.[] | .name | select(.name | startswith("ng-"))'存在逻辑错误——当通过.name提取出名称字段后,select的上下文已经是字符串,不能再用.name,应直接写select(startswith("test-"))。正确命令示例
- 若要保留完整的仓库对象:
jq '.[] | select(.name | startswith("test-"))' - 若只需要提取仓库名称:
jq -r '.[] | .name | select(startswith("test-"))'
- 若要保留完整的仓库对象:
转义字符问题
原命令中的"是HTML转义的双引号,在bash环境中需替换为普通双引号或单引号,避免导致匹配规则失效,比如将"test-"改为"test-"。
验证测试
针对你提供的示例JSON(仓库名称为Hello-World),将过滤条件改为startswith("Hello-")即可匹配成功:
jq -r '.[] | .name | select(startswith("Hello-"))'
执行后会输出:Hello-World
完整curl命令
curl -X GET \ --url "${API_URL_PREFIX}/orgs/${ORG}/repos?type=private&page=${PAGE}&per_page=100" \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer $GITHUB_TOKEN" | jq -r '.[] | .name | select(startswith("test-"))'
内容的提问来源于stack exchange,提问作者Dough
相关产品推荐
相关产品推荐

