如果我卷曲到某个站点,我可以直接获得 json:
curl http://httpbin.org/ip
{ "origin": "37.77.126.22"}
Run Code Online (Sandbox Code Playgroud)
为了美化,我这样做:
curl http://httpbin.org/ip | jq
{
"origin": "37.77.126.22"
}
Run Code Online (Sandbox Code Playgroud)
为了美化它并保存它,我重定向...但它不起作用
curl http://httpbin.org/ip | jq > output.txt
{
"origin": "37.77.126.22"
}
(23) Failed writing body
Run Code Online (Sandbox Code Playgroud)
应该怎么做?
Kus*_*nda 19
你在第二个例子中得到了 JSON 输出,这让我有点惊讶。在我的系统上,jq
输出一条错误消息,其中还包含使用信息:
$ curl "http://httpbin.org/ip" | jq >file
jq - commandline JSON processor [version 1.5]
Usage: jq [options] <jq filter> [file...]
jq is a tool for processing JSON inputs, applying the
given filter to its JSON text inputs and producing the
filter's results as JSON on standard output.
The simplest filter is ., which is the identity filter,
copying jq's input to its output unmodified (except for
formatting).
For more advanced filters see the jq(1) manpage ("man jq")
and/or https://stedolan.github.io/jq
Some of the options include:
-c compact instead of pretty-printed output;
-n use `null` as the single input value;
-e set the exit status code based on the output;
-s read (slurp) all inputs into an array; apply filter to it;
-r output raw strings, not JSON texts;
-R read raw strings, not JSON texts;
-C colorize JSON;
-M monochrome (don't colorize JSON);
-S sort keys of objects on output;
--tab use tabs for indentation;
--arg a v set variable $a to value <v>;
--argjson a v set variable $a to JSON value <v>;
--slurpfile a f set variable $a to an array of JSON texts read from <f>;
See the manpage for more options.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 33 100 33 0 0 115 0 --:--:-- --:--:-- --:--:-- 136
(23) Failed writing body
Run Code Online (Sandbox Code Playgroud)
“失败的写入正文”来自curl
asjq
由于错误而退出,并且无法读取正文(网页的内容)。
jq
需要一个过滤器表达式。最简单的过滤器是.
(dot),它的作用类似于“直通”过滤器(在上面的使用信息中称为“身份过滤器”):
$ curl "http://httpbin.org/ip" | jq . >file
Run Code Online (Sandbox Code Playgroud)