在Unix Shell脚本中以可读JSON格式显示curl输出


215

在我的Unix Shell脚本中,当我执行curl命令时,结果将显示如下,我将其重定向到文件:

{"type":"Show","id":"123","title":"name","description":"Funny","channelTitle":"ifood.tv","lastUpdateTimestamp":"2014-04-20T20:34:59","numOfVideos":"15"}

但是,我希望此输出以可读的JSON格式放入文件中,如下所示:

{"type":"Show",
"id":"123",
"title":"name",
"description":"Funny",
"channelTitle":"ifood.tv",
"lastUpdateTimestamp":"2014-04-20T20:34:59",
"numOfVideos":"15"}

如何以这种方式格式化输出?

Answers:


533

尝试这样做:

curl ... | json_pp 

或搭配 使用身份过滤器:

curl ... | jq '.'

在此处输入图片说明

或搭配

curl ... | node <<< "var o = $(cat); console.log(JSON.stringify(o, null, 4));"

检查https://stedolan.github.io/jq/


1
请先尝试,而不重定向到文件。您是否测试过是否安装了json_pp或jq?它带有perl
Gilles Quenot 2014年

1
json_pp似乎以相反的顺序格式化数据。有没有办法撤销数据?
安东尼奥

1
json_pp是Perl命令实用程序,可在某些输入和输出格式(其中JSON格式)之间进行转换。默认输入格式为json,默认输出格式为json(带pretty选项)。
巴乔(Fabijan Bajo)

3
通往json_pp解决方案的管道是如此优雅。谢谢
安迪

1
进入节点的管道非常优雅。谢谢!
Matthew Zackschewski

53

我猜想您要美化JSON输出。可以使用python实现:

curl http://localhost:8880/test.json | python -mjson.tool > out.json


谢谢回答。但我不使用Python,即时通讯使用shell。u能指导我外壳
卡纸

@Jams从外壳执行python,为您提供漂亮的打印输出。
agconti

python预装了很棒的解决方案。
Gayan Weerakutti

1
当我向其中添加“ | head”时,该python脚本会给出“断线”错误。
蹲着的小猫,

@CrouchingKitten我自己没有看到这个问题(可能是不同的版本),但这可能是由于head命令在到达末尾之前切断了通过管道传递给它的输出,从而“破坏了”管道。如果您允许head使用管道中的整个数据流,那么我希望错误不会出现。
–'code_dredd

19
python -m json.tool
Curl http://127.0.0.1:5000/people/api.json | python -m json.tool

也可以提供帮助。


11

您可以使用此节点模块

[sudo] npm i -g json; //建议不要使用root特权来安装节点模块

然后只需|json在卷曲后附加即可。 curl http://localhost:8880/test.json |json


11

这是吉尔斯答案的补充。有很多方法可以做到这一点,但就我个人而言,我更喜欢轻便,易于记住且通用的东西(例如,您的首选Linux风格的标准LTS安装或易于安装),可以在常见的* nix系统上进行。

以下是按其优先顺序排列的选项:

Python Json.tool模块

echo '{"foo": "lorem", "bar": "ipsum"}' | python -mjson.tool

优点:几乎无处不在;缺点:没有颜色编码


jq(可能需要安装一次)

echo '{"foo": "lorem", "bar": "ipsum"}' | jq

缺点:需要安装jq;优点:颜色编码和多功能


json_pp(在Ubuntu 16.04 LTS中可用)

echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp

对于Ruby用户

gem install jsonpretty
echo '{"foo": "lorem", "bar": "ipsum"}' | jsonpretty

谢谢@zhenhua!我用过 cat myFile.json | python -mjson.tool >> myFilePretty.json然后在编辑器中打开(vim,不要讨厌)并得到颜色。
essa

8

我发现json_reformat非常方便。所以我只是做了以下事情:

curl http://127.0.0.1:5000/people/api.json | json_reformat

而已!


如果使用Ubuntu,则可以在yajl-tools包中找到json_reformat。
凯文(Kevin)


1

动机:您想在curl命令请求后打印美化JSON响应。

解决方案json_pp-在某些输入和输出格式之间转换的命令行工具(其中之一是JSON)。该程序是从json_xs复制并修改的。默认输入格式为json,默认输出格式为json(带pretty选项)。

症状json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,...]]]

配方<someCommand> | json_pp

范例

请求

curl -X https://jsonplaceholder.typicode.com/todos/1 | json_pp 

响应

{
   "completed" : false,
   "id" : 1,
   "title" : "delectus aut autem",
   "userId" : 1
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.