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

时间:2019-05-07 18:39:21

标签: json select slice jq

假设我有以下数据:

{
   "dashboards": [
     {
       "name": "first",
       "type": "standard"
     },
     {
       "name": "second",
       "type": "custom"
     }
   ]
}

(实际上还有更多的数据,我只是在显示数据的结构)

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

我知道我可以使用以下命令来获得standard仪表板的全部 jq '.dashboards[] | select(.type == "standard")'

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

2 个答案:

答案 0 :(得分:1)

如果您希望将结果作为数组,则最好使用map

.dashboards | map(select(.type=="standard")) | .[0:10]

如果要将项目作为流,可以使用内置函数limit,例如

limit(10; .dashboards[] | select(.type=="standard"))

答案 1 :(得分:0)

这是使用基于步行路径的Unix实用程序 jtc 的另一种方法:

-我冒昧地用另外4条"type": "standard"记录扩展了您的源JSON示例,但仅显示了前3条(出于演示目的):

bash $ <file.json jtc -r
{ "dashboards": [ { "name": "first", "type": "standard" }, { "name": "second", "type": "custom" }, { "name": "second", "type": "standard" }, { "name": "third", "type": "standard" }, { "name": "fifth", "type": "standard" } ] }
bash $ 
bash $ 
bash $ <file.json jtc -w'[type]:<standard>:3 [-1]'
{
   "name": "first",
   "type": "standard"
}
{
   "name": "second",
   "type": "standard"
}
{
   "name": "third",
   "type": "standard"
}
bash $ 

PS>披露:我是jtc工具的创建者