如何用Bash提取GitHub API返回JSON的第一个键?
提取GitHub仓库语言API返回JSON的第一个键
推荐方案:用jq处理JSON(更可靠)
正则不是处理JSON的最佳选择,JSON结构的微小变化(比如空格、换行)都可能导致正则失效。推荐用专门的JSON处理工具jq,它能稳定提取第一个键:
修改你的脚本如下:
LANGUAGES=$(curl \ --request GET \ --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \ --header 'content-type: application/json' \ --url 'https://api.github.com/repos/${{ github.repository }}/languages' ) # 提取第一个键(保留GitHub返回的原始顺序) echo "$LANGUAGES" | jq -r 'keys_unsorted[0]'
keys_unsorted:保留JSON对象键的原始顺序(GitHub返回的语言顺序是按代码行数从多到少排列的)[0]:取第一个键-r:输出不带引号的原始字符串
备选方案:用正则提取(不推荐)
如果环境中无法安装jq,可以用正则匹配第一个带引号的键:
用grep实现:
echo "$LANGUAGES" | grep -oP '^\s*"([^"]+)"' | cut -d'"' -f2
用sed实现:
echo "$LANGUAGES" | sed -n 's/^\s*"\([^"]*\)".*/\1/p'
原理:匹配开头的任意空白字符,然后捕获第一个被双引号包裹的字符串,提取捕获内容。注意:如果JSON格式有变动(比如第一个键不在第一行),这个正则会失效。
内容的提问来源于stack exchange,提问作者nish
相关产品推荐
相关产品推荐

