用 JQ 删除“#”注释

Jor*_*dan 1 linux bash json jq

jq常见问题解答中,它说:

如上一个 Q 所述,在许多情况下,jq 本身可用于将几乎有效的 JSON 转换为 JSON。例如,可以使用 jq 删除“#”注释。

但是,我似乎找不到有关如何使用 jq 实际执行此操作的任何文档。读取带有“#”注释的 JSON 文件的正确方法是什么?

Cha*_*ffy 8

概括

按照您指向 jq 常见问题解答的链接,我们可以找到确切的报价:

[...] 因此,您可以jq -n -f FILENAME将几乎有效的 JSON 转换为 JSON。

这正是这里的情况。


解释

一个几乎是 JSON 但有#注释的文件将是有效的jq代码。因此,如果您有一个由 shell 命令创建的输入文件:

cat >input.notjson <<'EOF'
{
  "This is a key": "This is a value" # this is a comment, which is why this is not JSON
}
EOF
Run Code Online (Sandbox Code Playgroud)

...您可以将其作为 jq 程序运行:

jq -nf input.notjson
Run Code Online (Sandbox Code Playgroud)

...作为输出:

{
  "This is a key": "This is a value"
}
Run Code Online (Sandbox Code Playgroud)

...此后可以作为输入提供给另一个任意 jq 程序(或其他 JSON 使用者)。