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

在我的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"}

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

333087 次浏览

有几个解决方案可供选择:

json_pp: Linux系统中用于JSON解码/编码的命令实用程序

echo '{"type":"Bar","id":"1","title":"Foo"}' | json_pp -json_opt pretty,canonical
{
"id" : "1",
"title" : "Foo",
"type" : "Bar"
}

你可能想要保留-json_opt pretty,canonical参数以实现可预测的顺序。


:轻量级灵活的命令行JSON处理器。它是用可移植的C语言编写的,并且它没有运行时依赖性。

echo '{"type":"Bar","id":"1","title":"Foo"}' | jq '.'
{
"type": "Bar",
"id": "1",
"title": "Foo"
}

最简单的jq程序是表达式.,它接受输入,并将其作为输出产生。

有关其他jq选项,请检查手动


:

echo '{"type":"Bar","id":"1","title":"Foo"}' | python -m json.tool
{
"id": "1",
"title": "Foo",
"type": "Bar"
}

:

echo '{"type":"Bar","id":"1","title":"Foo"}' | node -e "console.log( JSON.stringify( JSON.parse(require('fs').readFileSync(0) ), 0, 1 ))"
{
"type": "Bar",
"id": "1",
"title": "Foo"
}

我猜你想美化JSON输出。 这可以使用python:

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

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

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

就是这样!

这是对吉尔斯的回答的补充。有很多方法可以做到这一点,但就我个人而言,我更喜欢在常见的*nix系统上使用轻量级、易于记忆和普遍可用的东西(例如,附带您喜欢的Linux风格的标准LTS安装或易于安装)。

以下是这些选项的优先顺序:

Python Json。工具模块

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

查看curljson

$ pip install curljson
$ curljson -i <the-json-api-url>
python -m json.tool
Curl http://127.0.0.1:5000/people/api.json | python -m json.tool

也能有所帮助。

你可以使用json节点模块:

npm i -g json

然后简单地在curl后面追加| jsoncurl http://localhost:8880/test.json | json < / p >

你想在curl命令请求后打印美化的JSON响应。

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

< p > Synposis: json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,…]]] < /代码> < / p >

公式: <someCommand> | json_pp

例子:

请求

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

响应

{
"completed" : false,
"id" : 1,
"title" : "delectus aut autem",
"userId" : 1
}

:

curl <...> | xidel - -se '$json'

xidel也可以为你检索JSON。

除了格式化,还有更多的特性(切片、过滤、映射和结构化转换)。

< a href = " https://stedolan.github。Io /jq/" rel="nofollow noreferrer">https://stedolan.github.io/jq/ .

你可以安装jq并像下面这样查询:

curl http://localhost:8080/observations/station/221 | jq

enter image description here