我似乎无法让jq
表现出正常情况""在shell管道中。例如:
$ curl -s https://api.github.com/users/octocat/repos | jq | cat
导致jq
只打印出其帮助文字*。如果我尝试将jq
的输出重定向到文件,则会发生同样的事情:
$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json
如果jq
确定它没有从tty中运行,是否故意拯救?如何防止此行为,以便我可以在管道中使用jq
?
* (我知道此示例包含useless use of cat;仅供参考)
答案 0 :(得分:278)
您需要提供过滤器作为参数。要通过未经修改的JSON而不是默认提供的漂亮打印jq
,请使用标识过滤器.
:
curl -s https://api.github.com/users/octocat/repos | jq '.' | cat
答案 1 :(得分:9)
我发现自己经常做的一个用例是“如何构建JSON数据以提供给其他shell命令,例如curl
?”我这样做的方式是使用--null-input/-n
选项:
根本不读任何输入!相反,使用
null
作为输入运行一次过滤器。当使用jq
作为简单计算器或从头构建JSON数据时,这非常有用。
并将示例传递给curl
:
jq -n '{key: "value"}' | curl -d @- \
--url 'https://some.url.com' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json'