【问题标题】:JQ: error: syntax error, unexpected INVALID_CHARACTER, expecting $endJQ:错误:语法错误,意外的 INVALID_CHARACTER,期待 $end
【发布时间】:2015-11-15 16:42:11
【问题描述】:

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

jq -s -R -f get.jq get-config.txt

返回:

error: syntax error, unexpected INVALID_CHARACTER, expecting $end
.1 compile error

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

jq -s -R . get-config.txt

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

【问题讨论】:

  • 我在 jq 1.5 上没有收到错误。 get.jq 是否包含 . 且仅包含 .?
  • get.jq 中的过滤器是什么?
  • 我使用的是 jq-1.4-1,是的 get.jq 仅包含 .如果我只打电话给jq -s -R -f get.jq 我也会收到这个错误。这真的很奇怪...... :(

标签: jq


【解决方案1】:

当我使用 MS Windows 行结尾时,我得到了一个非常相似的错误。例如,准备几个文件,id.jq 带有正常的 Unix 行结尾,id-ms.jq 带有 Microsoft 的 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

Unix 版本成功:

echo true | jq -f id.jq

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

echo true | jq -f id-ms.jq

导致 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

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

echo true | jq -f id-utf8bom.jq

给出更有限的错误信息:

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

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

【讨论】:

  • 刚刚提交了一个拉取请求来解决这个问题,希望我已经以可接受的方式解决了它!
【解决方案2】:

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

【讨论】:

  • 问题几乎可以肯定不是文件是用 UTF-8 编码的,这确实是常态。从您的帖子看来,问题可能源于字节顺序标记 (BOM),这表明您在 Windows 上使用记事本。如果您不使用 Windows,则在 get.jq 上运行“文件”;如果您使用的是 Windows,那么您可能需要考虑使用记事本以外的编辑器(例如 Notepad++)。
  • "file" on get.js 返回 ASCII 文本。是的,我在 win 下编码并通过 WinSCP 将其传输到 Linux 机器,我总是使用 notepad++。可能是文件存储在 UTF8 而不是 UTF8 w/o BOM 的情况。感谢您的澄清。
【解决方案3】:

就我而言,我正在从 slack 复制粘贴此命令,它会更改正常引号

''

到时尚的报价

‘’

你可能不会遇到这种情况,但如果你遇到了,你会感谢我的 :)

jq with quotes image

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多