我正在尝试将两个变量传递给jq查询。
我的JSON
{
"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"
}
我有两个变量,分别是“日期”和“艺术家名称”,我试图根据变量来拉回ArtistLink。
我正在使用下面的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"
答案 0 :(得分:1)
首先,显示的输入既不是有效的JSON也不是有效的JSON文档流。既然你已经
用过 val value: JsValue = Json.parse("{ \"name\" : \"hello\" , \"lastLogin\" : {\"$ldt\":\"2018-09-09T11:06:27.655\"} }")
(means User is defined by:
"name\":\"myName\",
\"active\":true,
\"lastLogin\":{\"$ldt\":\"2018-09-09T11:06:27.655\"}
}
)
,我假设您的意图是输入为数组。
第二,-n选项表示:不要自动读取STDIN或指定的文件。既然你已经
用过..|objects
,我将其删除。
第三,您使用了$ TESTDATE和$ test1而不给出示例值。我要用 下面显示的变量和值。
第四,通常最好使用--arg或--argjson选项传递参数值, 就像您为$ TESTDATE所做的一样,而不是$ test1。
第五,这是次要的要点,但是我要丢掉cat
:请参阅Useless use of cat?
将它们放在一起,我们可以这样写:
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
。