Select 如何使用jq根据键值对过滤json数据?

Select 如何使用jq根据键值对过滤json数据?,select,key-value,jq,Select,Key Value,Jq,假设下面给出了一些json数据: {"name":"alon","department":"abc","id":"ss12sd"} {"name":"kate","department":"xyz","id":"ajsj3" } {"name":"sam","department":"abc","id":"xx1d2"} 我想根据特定部门过滤数据,并将其保存在不同的json文件中。根据上面的数据,假设我想过滤部门为“abc”的所有数据,并将其保存在某个新的json文件中。我如何使用jq实现这一

假设下面给出了一些json数据:

{"name":"alon","department":"abc","id":"ss12sd"}
{"name":"kate","department":"xyz","id":"ajsj3" }
{"name":"sam","department":"abc","id":"xx1d2"}

我想根据特定部门过滤数据,并将其保存在不同的json文件中。根据上面的数据,假设我想过滤部门为“abc”的所有数据,并将其保存在某个新的json文件中。我如何使用jq实现这一点。我正在查看手册,但不太了解。

灵活的模板可能是这样的:

jq 'map(select(.department == "abc")) ' yourfile.json 
jq --arg key department --arg value abc \
'.[] | select(.[$key] == $value)' input_file.json > output_file.json
您会这样调用它:

./myscript.sh department abc input.json output.json


编辑:将
“\($key)”
更改为
[$key]
-谢谢@peak

灵活的模板可能是这样的:

jq --arg key department --arg value abc \
'.[] | select(.[$key] == $value)' input_file.json > output_file.json
您会这样调用它:

./myscript.sh department abc input.json output.json


编辑:将
“\($key)”
更改为
[$key]
-感谢@peak

我将如何让jq知道什么是输入json文件以及应该在哪里指定输出文件名我将如何让jq知道什么是输入json文件以及应该在哪里指定输出文件名是的,这很有效。实际上,我的输入文件如下所示:{“name”:“alon”,“department”:“abc”,“id”:“ss12sd”}{“name”:“kate”,“department”:“xyz”,“id”:“ajsj3”}{“name”:“sam”,“department”:“abc”,“id”:“xx1d2”}如果我试图运行上述查询,它会抛出错误jq:error(在test.json:1):无法使用字符串“location”索引字符串不能用字符串“department”索引字符串是的,这很有效。实际上,我的输入文件如下所示:{“name”:“alon”,“department”:“abc”,“id”:“ss12sd”}{“name”:“kate”,“department”:“xyz”,“id”:“ajsj3”}{“name”:“sam”,“department”:“abc”,“id”:“xx1d2”}如果我试图运行上述查询,它会抛出错误jq:error(在test.json:1):无法使用字符串“location”索引字符串无法为字符串为“department”的字符串编制索引