如何将变量传递到 JQ 选择/包含查询中



我正在尝试将两个变量传递到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

相关内容

  • 没有找到相关文章

最新更新