JQ:如何将数组选择器的输出转换回数组?

时间:2020-09-08 21:43:03

标签: arrays json jq

我正在使用带有jq的select函数来解析列表中包含特定值的项目。我希望结果输出是一个json列表,但是jq单独给了我这些对象:

示例:

$ a='{                                                                                   
  "FOO": {                                                                                    
    "name": "Donald",
    "location": "Stockholm"
  },
  "BAR": {
    "name": "Walt",
    "location": "Stockholm"
  },
  "BAZ": {
    "name": "Jack",
    "location": "Whereever"
  }
}'

$ echo $a | jq '.[] | select(.location=="Stockholm")' 
{
  "name": "Donald",
  "location": "Stockholm"
}
{
  "name": "Walt",
  "location": "Stockholm"
}

相反,我希望输出是这样的json列表:

[  
  {
    "name": "Donald",
    "location": "Stockholm"
  },
  {
    "name": "Walt",
    "location": "Stockholm"
  }
]

如何用jq做到这一点?

1 个答案:

答案 0 :(得分:2)

通常,您可以在任何表达式两边加上方括号,以将其所有输出收集到一个数组中。

const Discord = require('discord.js')
const bot = new Discord.Client()

bot.on('ready', () => {
  console.log("connected");
});

bot.on('message', (message) => {
  if(message.channel.id === '549389103071969869') {
    if(message.length !== '4') {
      message.delete()
    }
  }
});

有时候,不首先分解输入数组是有意义的,而是使用map对其进行变换:

[.[] | select(.location=="Stockholm")]