从select命令的输出重建数组

时间:2018-04-13 07:11:26

标签: arrays functional-programming jq

我必须根据测试模式选择数组中的对象

我应用以下命令:

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"
]

1 个答案:

答案 0 :(得分:1)

通过使用.[]启动管道,您将数组转换为流。您可以通过将整个jq表达式包装在方括号中来“重构”数组(即[ .... ]);或者您可以使用.[]首先避免使用map( select(...) )

(由于map(f)被实现为[.[] | f],所以你选择哪种方法并没有多大区别,除非是基于文体理由。有人可能认为map更适合功能性风格,而[.[] ... ]则偏向英语。)