You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jq操作指南:何时使用点操作符,何时不使用?

jq中点操作符的使用时机与示例操作详解

我来帮你理清楚jq里点操作符的使用逻辑,再结合你给出的JSON示例,一步步拆解常见的选择操作~

一、何时用点操作符,何时不用?

必须用点的核心场景

jq的过滤器默认是针对当前输入的JSON数据,所以当你要访问当前输入对象的属性时,必须以点(.)开头:

  • 访问顶层对象的直接属性:比如想取JSON里的data属性,就得写.data(直接写data会被当成未定义的变量,报错)
  • 访问嵌套层级的属性:比如data下的search,要写成.data.search;再往下的repositoryCount就是.data.search.repositoryCount
  • 访问数组元素的属性:比如数组里每个元素的node属性,要写成.edges[].node(这里[]是展开数组,前面的.edges先定位到数组)

如果属性名包含特殊字符(空格、连字符、数字开头),那得用方括号加引号包裹属性名,但点还是不能少:
比如属性名是repo-count,访问方式是.["repo-count"]或者.data.search["repo-count"]

不需要用点的场景

  • 使用jq内置函数:比如length(返回数组长度/对象属性个数)、keys(返回对象的属性名数组),直接写函数名即可。比如想知道edges数组有多少元素,写成.data.search.edges | length
  • 数组展开/索引操作:当你已经通过点定位到数组后,用[]展开所有元素,或者[0]取第一个元素,这里[]/[0]前面不需要额外加。比如.data.search.edges[]
  • 变量引用:如果之前定义了变量(比如$repoName = .node.name),直接用变量名即可
  • 字面量值:直接写字符串、数字等字面量,比如jq '"hello"'会输出"hello"

二、针对你的JSON示例的具体选择操作

先把你的示例JSON简化一下,方便对照:

{
  "data": {
    "search": {
      "repositoryCount": 24,
      "edges": [
        {
          "node": {
            "name": "leumi-leumicard-bank-data-scraper",
            "url": "https://github.com/Urigo/leumi-leumicard-bank-data-scraper",
            "description": "Open bank data for Leumi bank and Leumi card credit card"
          }
        },
        {
          "node": {
            "name": "puppeteer-demo",
            "url": "https://github.com/xJkit/puppeteer-demo",
            "description": "A demo for website scrapping by my puppet :>"
          }
        }
      ]
    }
  }
}

下面是常用的操作命令:

  1. 获取顶层的data对象
jq '.data' input.json

输出整个data下的嵌套结构

  1. 获取仓库总数repositoryCount
jq '.data.search.repositoryCount' input.json

输出:24

  1. 展开所有edges数组元素
jq '.data.search.edges[]' input.json

会逐个输出数组里的每个edge对象(包含node属性的那个)

  1. 提取所有仓库的名称
jq '.data.search.edges[].node.name' input.json

输出两行结果:

"leumi-leumicard-bank-data-scraper"
"puppeteer-demo"
  1. 获取第一个仓库的URL
jq '.data.search.edges[0].node.url' input.json

输出第一个仓库的URL字符串

  1. 自定义输出结构(比如只保留名称和描述)
    用管道符|把前面的结果传给下一个过滤器,重新组合对象:
jq '.data.search.edges[] | {仓库名称: .node.name, 描述: .node.description}' input.json

输出:

{
  "仓库名称": "leumi-leumicard-bank-data-scraper",
  "描述": "Open bank data for Leumi bank and Leumi card credit card"
}
{
  "仓库名称": "puppeteer-demo",
  "描述": "A demo for website scrapping by my puppet :>"
}

内容的提问来源于stack exchange,提问作者xpt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:32:45