这是我的config.json:
{
"env": "dev",
"dev": {
"projects" : {
"prj1": {
"dependencies": {},
"description": ""
}
}
}
}
以下是我的bash命令:
PRJNAME='prj1'
echo $PRJNAME
jq --arg v "$PRJNAME" '.dev.projects."$v"' config.json
jq '.dev.projects.prj1' config.json
输出:
prj1
null
{
"dependencies": {},
"description": ""
}
所以$ PRJNAME是prj1,但第一次调用只输出null
。
有人可以帮助我吗?
答案 0 :(得分:32)
您示例中的jq程序.dev.projects."$v"
将逐渐尝试查找名为"$v"
的密钥。请尝试以下方法:
jq --arg v "$PRJNAME" '.dev.projects[$v]' config.json
答案 1 :(得分:7)
制作json时也可以使用--argjson
。
--arg a v set variable $a to value <v>;
--argjson a v set variable $a to JSON value <v>;
答案 2 :(得分:2)
正如上面评论中所提到的那样,有一种方法可以传递多个论点。 也许有一种更优雅的方式,但它有效。
jq --arg key1 $k1 --arg key2 $k2 --arg key3 $k3 --arg key4 $k4 '.[$key1] | .[$key2] | .[$key3] | .[$key4] '
jq --arg key $k ' if key != "" then .[$key] else . end'
jq --arg key $k ' if type == "array" then .[$key |tonumber] else .[$key] end'
当然你可以结合这些!
答案 3 :(得分:0)
您可以执行以下操作:
key="dev.projects.prj1"
filter=".$key"
cat config.json | jq $filter