JQ:错误:语法错误,意外的 INVALID_CHARACTER,期待 $end

Nic*_*Nic 7 jq

我在 Linux 的命令行上调用 jq 是这样的:

jq -s -R -f get.jq get-config.txt
Run Code Online (Sandbox Code Playgroud)

返回:

error: syntax error, unexpected INVALID_CHARACTER, expecting $end
.1 compile error
Run Code Online (Sandbox Code Playgroud)

但是在 get.jq 文件中只有一个点可以测试

jq -s -R . get-config.txt
Run Code Online (Sandbox Code Playgroud)

返回良好。那么jq文件有什么问题呢?

Sam*_*son 6

当我使用 MS Windows 行结尾时,我得到了一个非常相似的错误。例如,准备几个文件,id.jq带有健全的 Unix 行结尾和id-ms.jqMicrosoft 的 CP/M 风格 CR-LF 行结尾,最后id-utf8bom.jq是一个 Unix 行结尾和一个 UTF-8 BOM:

printf '.\n' > id.jq
printf '.\r\n' > id-ms.jq
printf '\xef\xbb\xbf.\n' > id-utf8bom.jq
Run Code Online (Sandbox Code Playgroud)

并且 Unix 版本成功:

echo true | jq -f id.jq
Run Code Online (Sandbox Code Playgroud)

而带有回车符和换行符的换行文件:

echo true | jq -f id-ms.jq
Run Code Online (Sandbox Code Playgroud)

导致 jq(版本 1.6)失败:

jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell quoting issues?) at <top-level>, line 1:

jq: error: try .["field"] instead of .field for unusually named fields at <top-level>, line 1:
.
jq: 2 compile errors
Run Code Online (Sandbox Code Playgroud)

以及带有 UTF-8 BOM 版本的版本:

echo true | jq -f id-utf8bom.jq
Run Code Online (Sandbox Code Playgroud)

给出了更有限的错误信息:

jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
?.
jq: 1 compile error
Run Code Online (Sandbox Code Playgroud)

如果它能够识别/处理这些相对常见的编码,那就太好了,但目前似乎还没有!


Nic*_*Nic 0

好吧,发现了这个烦人的“bug”:我的 jq 文件是 UTF-8,如果我将其更改为 ansi,它就可以工作了!感谢您的支持。

  • 几乎可以肯定,问题不在于文件采用 UTF-8 编码,而这确实是常态。从您的帖子来看,问题可能源于字节顺序标记 (BOM),这表明您在 Windows 上使用记事本。如果您不使用 Windows,则在 get.jq 上运行“file”;如果您使用的是 Windows,那么您可能需要考虑记事本以外的编辑器(例如 Notepad++)。 (3认同)