如何使用 jq 过滤数组和切片结果

Red*_*let 2 select json slice jq

假设我有以下数据:

{
   "dashboards": [
     {
       "name": "first",
       "type": "standard"
     },
     {
       "name": "second",
       "type": "custom"
     }
   ]
}
Run Code Online (Sandbox Code Playgroud)

(实际上数据远不止于此,我只是展示数据的结构是什么)

我想做的是获取前 10 个类型为 的仪表板standard

我知道我可以通过以下方式获取所有仪表standard板: jq '.dashboards[] | select(.type == "standard")'

但我不知道如何对结果数组进行切片......

pea*_*eak 9

如果您希望结果作为数组,您可以使用map

.dashboards | map(select(.type=="standard")) | .[0:10]
Run Code Online (Sandbox Code Playgroud)

然而,这是低效的。为了提高效率,最好limit按照下面讨论的方式使用。

如果您希望这些项目作为流,您可以编写:

limit(10; .dashboards[] | select(.type=="standard"))
Run Code Online (Sandbox Code Playgroud)

如果您希望结果为数组,只需将上面的 jq 表达式括在方括号中即可。