我必须根据测试模式选择数组中的对象
我应用以下命令:
jq '.[] | select(.path | test("a/b") | not)'
到以下对象
[
{
path: "a/b"
},
{
path: "a/b/c"
},
{
path: "a/c"
},
{
path: "a/d"
}
]
我的问题是结果不再是数组而是对象列表。我试图做最明显的事情,即将命令传递给map(.)
,但我得到以下结果:
[
"a/c"
]
[
"a/d"
]
答案 0 :(得分:1)
通过使用.[]
启动管道,您将数组转换为流。您可以通过将整个jq表达式包装在方括号中来“重构”数组(即[ .... ]
);或者您可以使用.[]
首先避免使用map( select(...) )
。
(由于map(f)
被实现为[.[] | f]
,所以你选择哪种方法并没有多大区别,除非是基于文体理由。有人可能认为map
更适合功能性风格,而[.[] ... ]
则偏向英语。)