如何使用jq基于键值对过滤json数据?

时间:2017-12-12 18:19:50

标签: 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做到这一点。我正在查看来自here的手册,但对此并不了解。

2 个答案:

答案 0 :(得分:3)

jq 'map(select(.department == "abc")) ' yourfile.json 

答案 1 :(得分:1)

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

jq --arg key department --arg value abc \
'.[] | select(.[$key] == $value)' input_file.json > output_file.json

通过这种方式,您可以在参数阶段而不是表达式中更改条件。

将其实现为shell脚本可能如下所示:

<强> myscript.sh

#!/usr/bin/env bash
key="$1"
value="$2"
file="$3"
outfile="$4"
jq --arg key "$1" --arg value "$2" \
'.[] | select(.[$key] == $value)' "$3" > "$4"

你会这样调用:

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

修改:将."\($key)"更改为.[$key] - 感谢@peak