我正在尝试使用jq从Bash脚本中基于值的动态列表的过滤器过滤json文件中的数据。
以下jq命令可单独运行:
jq -r '.[] | select(.name==("value1","value2"))' file.json
在Bash中,如果我将变量设置为单个值并将其传递给我,则以下命令有效
testValue="value1"
result=$(jq -r --arg TESTVALUE "$testValue" '.[] | select(.name==($TESTVALUE))' file.json)
echo "$result"
如果我将变量设置为逗号分隔的值列表,并将其传递给它,则不会返回任何结果
testValues="\"value1\", \"value2\""
result=$(jq -r --arg TESTVALUES "$testValues" '.[] | select(.name==($TESTVALUES))' file.json)
echo "$result"
我是bash脚本的新手,所以我确定我在解释变量方面缺少一些简单的东西。我也包括了下面的file.json。
[
{
"name": "value1",
"test": "blah1"
},
{
"name": "value2",
"test": "blah2"
}
]
--arg
会将您的值视为文字字符串,因此引号和逗号不会产生任何影响。
您可以改为将列表格式化为有效的JSON列表,并使用--argjson
:
testValues='[ "value1", "value2" ]'
jq --argjson TESTVALUES "$testValues" '.[] | select(.name==($TESTVALUES[]))' file.json
甚至更好的做法是,指定一些定界符,然后让jq拆分您的字符串,因此您不必担心JSON转义:
testValues='value1,value2'
jq --arg TESTVALUES "$testValues" '.[] | select(.name==($TESTVALUES | split(",")[]))' file.json
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句