ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

jq 数组切片 `[n:m]` 详解:轻松截取数组两端子集

jq 数组切片 `[n:m]` 详解:轻松截取数组两端子集 文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载本篇指南聚焦于 TIL 仓库 jq/get-a-slice-of-the-ends-of-an-array.md 所讲解的 jq 数组切片语法[n:m]从通用形式出发完整覆盖「省略边界值取开头」「负索引从末尾倒数取结尾」两大核心用法并结合仓库内其他 jq 笔记与命令行实操示例让你在处理 JSON 数组时无需知道数组长度即可精准截取首部或尾部子集。jq 数组切片语法基础jq 内置了一套与 Python/Ruby 等语言相似的切片slice语法允许我们从数组以及字符串中提取一段连续的子集。通用形式是[n:m]其中n是切片起始位置的索引包含inclusive该位置的元素m是切片结束位置的索引不包含non-inclusive该位置的元素。换句话说[n:m]取的是「从第n个元素开始、到第m个元素之前不含第m个结束」的连续区间。例如对于一个 7 元素的数组[1:4]会取出索引 1、2、3 三个元素。当n与m之一被省略时jq 会使用默认边界写法含义[n:m]从索引n含到索引m不含[:m]省略n等价于[0:m]即从数组开头到索引m不含[n:]省略m等价于[n:length]即从索引n到数组末尾[:]等价于[0:length]即整个数组省略n时默认是0数组起点省略m时默认到列表末尾。这正是「取数组两端子集」的语法基础。取数组开头几个元素省略起始索引既然省略n默认从索引0开始那么.[:m]天然就是「取数组前m个元素」。仓库原文给出的例子如下❯ echo [a,b,c,d,e,f,g] | jq .[:3] [ a, b, c ]这里.[:3]等价于.[0:3]取出的是索引 0、1、2 三个元素。注意索引m3对应的元素d并不会出现在结果中因为结束索引是不含的。这种写法非常适合在调试大 JSON 时快速「瞄一眼」数据头部例如配合 jq/count-the-number-of-things-in-a-json-file.md 中介绍的length函数先用.[:5]看前 5 条记录确认结构再放心处理整个数组。负索引从数组末尾倒数除了从开头数jq 还支持负索引-1指向数组的最后一个元素-2指向倒数第二个以此类推。也就是说负数是从数组末尾往回数的偏移量。正因如此我们可以不依赖数组长度直接以「距末尾多远」为基准来切切片。仓库原文用它来取数组末尾的几个元素❯ echo [a,b,c,d,e,f,g] | jq .[-3:] [ e, f, g ]这里的.[-3:]表示「从倒数第 3 个元素索引 4即e一直切到数组末尾」于是得到最后三个元素。省略m时默认到末尾所以这条命令天然适配「数组长度未知但我知道要取最后 N 个」的场景。负索引与仓库内另一篇笔记 jq/get-the-last-item-from-an-array.md 一脉相承那篇笔记展示了用.[-1]直接取最后一个元素而切片[-3:]就是把它推广到「末尾一段连续子集」。两者可以相互印证-1定位最后一个元素、-2定位倒数第二个……-k定位倒数第 k 个。边界组合灵活截取数组内部或尾部片段掌握了「省略默认值」与「负索引」两个规则后可以组合出多种实用切片取除最后一个元素外的全部内容❯ echo [a,b,c,d,e,f,g] | jq .[:-1] [ a, b, c, d, e, f ][:-1]从索引 0 切到倒数第一个元素之前即丢弃数组最后一个元素。取从倒数第 3 个到倒数第 2 个之前即倒数第 3、第 2 个元素❯ echo [a,b,c,d,e,f,g] | jq .[-3:-1] [ e, f ]这里n-3对应e含与m-1对应g不含都是负索引jq 会先把它们换算成正索引再执行切片结果恰好是e、f两个元素。从正索引切到末尾❯ echo [a,b,c,d,e,f,g] | jq .[2:] [ c, d, e, f, g ]切片同样适用于字符串需要提醒的是这套[n:m]切片语法并非数组专属——jq 官方手册将其归为「Array/String Slice」即数组和字符串共用同一套切片规则。对字符串切片时返回的是子字符串❯ echo hello world | jq .[:5] hello同样支持负索引❯ echo hello world | jq .[-3:-1] rl这让我们可以用完全一致的思路去截取字符串的头尾部分而无须记忆另一套函数。实际应用截取大 JSON 输出的两端在真实命令行工作中「取两端子集」最常见的价值在于处理超长输出。例如 github/process-json-output-from-gh-with-jq.md 演示了用gh repo list --json拉取上千条仓库记录的场景——此时直接在管道里追加一个切片即可把结果收敛到可读范围gh repo list --limit 1000 --json nameWithOwner,description \ --jq .[:10]同样地把 JSON 文件作为输入时参考 jq/extract-a-list-of-values.md 中.items[]的取值方式切片可以与路径选择器组合使用例如.[-5:]只保留数组的最后 5 条或者先.[0:2]再继续.items[].name提取字段。这些技巧叠加后即使面对百万级记录的文件也能用一条命令完成「只看尾部几条」的轻量探查。小结jq 的切片语法[n:m]用两个规则就能覆盖大部分截取需求n含、m不含省略n从开头算起省略m到末尾为止负索引从数组末尾往回数-1即最后一个元素。由此即可用.[:3]取头部、.[-3:]取尾部、.[:-1]去掉末位且无需预先知道数组长度。该语法对数组与字符串通用是日常处理 JSON 输出时的高频利器。想继续深入可延伸阅读仓库中的 jq/get-the-last-item-from-an-array.md单元素索引与last函数、jq/extract-a-list-of-values.md括号与通配遍历以及 jq/count-the-number-of-things-in-a-json-file.mdlength计数串起完整的 jq 数组操作知识链。赞分享文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载相关推荐Enzyme ReactWrapper .slice() 方法详解按数组切片规则截取节点子集Enzyme ReactWrapper .slice 方法详解按数组切片规则截取节点子集 .slice begin , end 是 Enzyme 中 Reac测试前端从数组创建切片掌握 Go 的 [n:m] 切片语法与边界省略规则从数组创建切片掌握 Go 的 n:m 切片语法与边界省略规则 导读 Go 中的切片slice是对底层数组array的灵活抽象日常开发中我们经常需要基文档教程知识库3行代码搞定bash数组切片技巧告别繁琐的子数组提取3行代码搞定bash数组切片技巧告别繁琐的子数组提取 在bash脚本编程中数组是处理批量数据的强大工具但许多新手常因复杂的子数组提取操作而却步。本文将介教程上一篇终极指南how2命令行工具的国际化配置与多语言支持下一篇FileSaver.js与StreamSaver.js对比何时选择哪个工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表