我正在尝试将两个变量传递到jq查询中。
我的杰伦
{
"AlbumTitle": "Name Of Album",
"AlbumLink": "/album/link/id/1/album-name/",
"ArtistName": "Artist Name",
"Date": "September 14, 2018"
},
{
"AlbumTitle": "Name Of Album",
"AlbumLink": "/album/link/id/2/album-name/",
"ArtistName": "Artist Name",
"Date": "September 13, 2018"
}
我将两个变量作为日期和艺术家姓名,我正在尝试根据变量拉回艺术家链接。
我正在使用下面的 JQ 行。
cat test.json | jq -n -r --arg TESTDATE "$TESTDATE" '.. | objects | {select(.Date == '"$TESTDATE"')} | select(.ArtistName | contains('"$test1"')) | .AlbumLink'
我收到错误
"jq: error: syntax error, unexpected '(', expecting '}' (Unix shell quoting issues?) at <top-level>, line 1:
.. | objects | {select(.Date == September 13, 2018)} | select(.ArtistName | contains(Artist)) | .AlbumLink
jq: 1 compile error"
首先,显示的输入既不是有效的 JSON,也不是有效的 JSON 文档流。 既然你已经 使用..|objects
我假设您的意图是输入是一个数组。
其次,-n 选项表示:不自动读取 STDIN 或指定的文件。 既然你已经 用过cat
,我会放弃它。
第三,您使用了 $TESTDATE 和 $test 1 而没有给出样本值。 我要用 下面显示的变量和值。
第四,通常最好使用 --arg 或 --argjson 选项传入参数值, 就像你为$TESTDATE而不是$test 1所做的那样。
第五,这是一个小问题,但我要失去cat
:看到无用的猫吗?
综上所述,我们可以这样写:
testdate="September 13, 2018"
testname="Artist Name"
< test.json jq -r --arg testdate "$testdate" --arg testname "$testname" '
.[]
| select((.Date == $testdate) and (.ArtistName | contains($testname)))
| .AlbumLink '
然而,contains
是一个有趣的野兽,通常我建议使用index
。