如何在Shell脚本中漂亮地打印JSON?


3060

是否有(Unix)Shell脚本以易于理解的格式格式化JSON?

基本上,我希望它可以转换以下内容:

{ "foo": "lorem", "bar": "ipsum" }

...变成这样:

{
    "foo": "lorem",
    "bar": "ipsum"
}


7
我回想了一下github.com/exhuma/braindump/tree/master/jsonformat使用python自己的json库,代码很简单,但是我也添加了pygments来突出显示语法。
2012年

偶然发现这一点,然后发现了Json Pretty,我非常喜欢它。Typekit在其API示例中使用了它,因此它后面有一些klout ^^
Nick Tomlin

如果您不介意复制粘贴,那么还有一些简单的在线工具,例如jsonprettyprint.net,可以在其中快速漂亮地打印原始JSON。
Javaaaa 2014年

7
警告:python -m json.tool并不总是产生有效的JSON。(提示:1e1000)
达到峰值

Answers:


4459

使用Python 2.6+,您可以执行以下操作:

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

或者,如果JSON在文件中,则可以执行以下操作:

python -m json.tool my_json.json

如果JSON来自互联网来源(例如API),则可以使用

curl http://my_url/ | python -m json.tool

为方便起见,在所有这些情况下都可以使用别名:

alias prettyjson='python -m json.tool'

为了方便起见,请进行更多输入以使其就绪:

prettyjson_s() {
    echo "$1" | python -m json.tool
}

prettyjson_f() {
    python -m json.tool "$1"
}

prettyjson_w() {
    curl "$1" | python -m json.tool
}

以上所有情况。您可以将其放入.bashrc,每次在shell中都可用。像这样调用它prettyjson_s '{"foo": "lorem", "bar": "ipsum"}'


72
您可以通过管道将其pygmentize -l javascript传输到命令行上以获取彩色的语法输出。编辑:如果您安装了pygments。
Shrikant Sharat 2011年

177
一个很好的答案,我唯一要注意的是它确实对输出中的键进行了排序-您可能需要注意。
克里斯·纳什2012年

14
在myy .vimrc“ nnoremap <f5>:%!python -m json.tool <CR>:w <CR>”
imwilsonxu 2012年

40
这似乎将Unicode字符转义到\ uXXXX中,这可能是一个缺点。
user1071136 2012年

13
我创建了一个别名:alias pretty='python -mjson.tool | pygmentize -l json以便可以运行:command params | pretty。希望这可以帮助。PS:如果有人设法将其扩展为:a)删除我每次看到的curl-output和/或b)不对json键进行排序;请让我知道,我将非常感谢。
克林特·伊斯特伍德

1023

您可以使用: jq

使用非常简单,效果很好!它可以处理非常大的JSON结构,包括流。您可以在此处找到他们的教程。

用法示例:

$ jq --color-output . file1.json file1.json | less -R

$ command_with_json_output | jq .

$ jq . # stdin/"interactive" mode, just enter some JSON

$ jq . <<< '{ "foo": "lorem", "bar": "ipsum" }'
{
  "bar": "ipsum",
  "foo": "lorem"
}

的。是身份过滤器。


11
还有一个--sort-keys选项,在某些情况下很有用。
马修·弗莱申

9
使用curl:curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.'
Hover Ruan

19
“ jq。” 作为一个漂亮的打印机,它非常棒,但是它带有一个警告:jq(1.5版及以下版本的jq)会更改非常大和非常小的数字的值,因为它会将数字值解析为IEEE 754 64位值。要检查您喜欢的漂亮打印机是否存在相同的问题,请尝试以下值:1e1000。请注意,python -mjson.tool未能通过此测试,因为它会生成Infinity(甚至不是JSON),也因此严重失败。
达到峰值

1
请注意,您可以将格式化结果重定向到文件:echo '{ "foo": "lorem", "bar": "ipsum" }' | jq . > myfile
乍得

26
@Meekohi的替代方法是“不必要地使用echo”。非常高兴找到<<<操作员-正是我想要的。
jchook

381

我使用的是 JSON.stringify在JavaScript中漂亮地打印JSON。

例子:

// Indent with 4 spaces
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, 4);

// Indent with tabs
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, '\t');

从带有Node.js的Unix命令行中,在命令行上指定JSON:

$ node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, '\t'));" \
  '{"foo":"lorem","bar":"ipsum"}'

返回值:

{
    "foo": "lorem",
    "bar": "ipsum"
}

在带有Node.js的Unix命令行中,指定包含JSON的文件名,并使用四个空格的缩进:

$ node -e "console.log(JSON.stringify(JSON.parse(require('fs') \
      .readFileSync(process.argv[1])), null, 4));"  filename.json

使用管道:

echo '{"foo": "lorem", "bar": "ipsum"}' | node -e \
"\
 s=process.openStdin();\
 d=[];\
 s.on('data',function(c){\
   d.push(c);\
 });\
 s.on('end',function(){\
   console.log(JSON.stringify(JSON.parse(d.join('')),null,2));\
 });\
"

10
为了在Node.js中调试对象,您应该真正使用sys.inspect()而不是JSON.stringify()。原因如下:markhansen.co.nz/inspecting-with-json-stringify
Gurpartap Singh

11
不赞成投票。OP是关于“ * nix命令行脚本”的,这个答案是不同的上下文。
danorton 2012年

49
@danorton:可以通过node.js和其他类似解决方案在命令行中使用JS。
calvinf 2012年

10
无需控制台:node -p "JSON.stringify(JSON.parse(process.argv[1]), null, '\t');"还将结果输出到STDOUT。
朱利安D.14年

2
令人遗憾的是,文件名与标准输入的脚本是不同的
Lukasz Wiktor 2016年

340

我编写了一个工具,该工具具有可用的最佳“智能空白”格式化程序之一。与此处的大多数其他选项相比,它产生的可读性更高,输出的详细信息更少。

下划线

这是“智能空白”的样子:

我可能有点偏颇,但是它是用于从命令行打印和操作JSON数据的强大工具。它使用起来超级友好,并且具有广泛的命令行帮助/文档。这是一把瑞士军刀,我用它来完成1001个不同的小任务,这会令人讨厌地以任何其他方式进行。

最新用例:Chrome,Dev控制台,“网络”选项卡,全部导出为HAR文件,“ cat site.har |下划线选择'.url'--outfmt text | grep mydomain”;现在,我有一个按时间顺序排列的列表,列出了在加载公司网站期间提取的所有URL。

漂亮的打印很容易:

underscore -i data.json print

一样:

cat data.json | underscore print

同样,更明确:

cat data.json | underscore print --outfmt pretty

这个工具是我目前的热情项目,因此,如果您有任何功能要求,我很可能会解决。


4
我还更新了〜/ .bash_profile,使其具有以下行:alias underscor ='underscore print --outfmt pretty'现在,我可以卷曲一下example.com/result.json | 下划线并仍使用下划线进行其他格式设置
Gal Bracha 2013年

谢谢戴夫!工具不错!别名pretty-json =“ underrsore pretty”和curl输出令人赏心悦目
Maxim Ponomarev

出色的格式化工具,仅需注意一点:将输出转发到文件(使用-o选项或使用>)仅适用于下划线print下划线相当节省用插入颜色格式的标志文件,水木清华,如:[32m[33m[39m伴随着他们每个人的面前一些不可打印,这让JSON无效。但是,仅下划线打印不会向文件添加任何内容,并且可以完美地完成其格式化工作。
tiurin

我喜欢,jq但这对于没有双引号键的“ JSON”非常有用。
Bluu

@DaveDopson感谢您提供的出色工具!要去尝试使用它旁边jsonselect.org/#tryit ...
mycargus

173

我通常只是这样做:

echo '{"test":1,"test2":2}' | python -mjson.tool

并检索选择的数据(在这种情况下为“测试”的值):

echo '{"test":1,"test2":2}' | python -c 'import sys,json;data=json.loads(sys.stdin.read()); print data["test"]'

如果JSON数据在文件中:

python -mjson.tool filename.json

如果您想curl使用身份验证令牌在命令行中进行全部操作,请执行以下操作:

curl -X GET -H "Authorization: Token wef4fwef54te4t5teerdfgghrtgdg53" http://testsite/api/ | python -mjson.tool

如果json应该直接来自http api,那么这也是用python实现的一个不错的工具:github.com/jkbr/httpie
Florian

如果您安装了节点(不介意YAML样式的输出),那么还可以使用以下软件包:rafeca.com/prettyjson,这样您就可以结束卷曲了 | prettyjson
Iolo

3
如上所述,python -mjson.tool作为JSON漂亮打印机的问题之一是它并不总是发出JSON。例如1e1000变为Infinity(无论使用python 2.x还是3.x)。'jq'。总是产生JSON,但不能保证准确保留很大(或很小的值)。
达到峰值

88

感谢JF Sebastian的非常有用的指针,这是我想出的一个稍微增强的脚本:

#!/usr/bin/python

"""
Convert JSON data to human-readable form.

Usage:
  prettyJSON.py inputFile [outputFile]
"""

import sys
import simplejson as json


def main(args):
    try:
        if args[1] == '-':
            inputFile = sys.stdin
        else:
            inputFile = open(args[1])
        input = json.load(inputFile)
        inputFile.close()
    except IndexError:
        usage()
        return False
    if len(args) < 3:
        print json.dumps(input, sort_keys = False, indent = 4)
    else:
        outputFile = open(args[2], "w")
        json.dump(input, outputFile, sort_keys = False, indent = 4)
        outputFile.close()
    return True


def usage():
    print __doc__


if __name__ == "__main__":
    sys.exit(not main(sys.argv))

3
将值加载到字典中后,顺序丢失:普通dict对象没有定义的顺序。尝试一下json.dumps(json.loads('{"b": 1, "a": 2}'), sort_keys=False),您将发现它们仍然被交换了。要修复它,请导入OrderedDictload传递object_pairs_hook=OrderedDict
icktoofay

您可以更改脚本这个标准输入读取数据:inputFile = sys.stdin。这样您就可以将内容通过管道传递给脚本,如下所示:curl http://somewhere.com/foo.json | pp_json.py
Gabe Johnson

1
为了避免按@icktoofay的注释进行排序,请像这样导入OrderedDict :from collections import OrderedDict
雨果

2
谢谢@icktoofay。这使我可以创建以下vim函数: com! FormatJSON %!python -c "from collections import OrderedDict; import sys; import json; j = json.load(sys.stdin, object_pairs_hook=OrderedDict); json.dump(j, sys.stdout, sort_keys=False, indent=4, separators=(',', ': '))" 请注意,必须将分隔符设置为(',',':'),以避免添加尾随空格:bugs.python.org/issue16333
blindsnowmobile

很棒的摘要!我sort_keys = True改用了它,因为我想用它来比较json文件,它的工作原理就像一个魅力。
JL Peyret

81

如果您使用npm和Node.js,则可以执行npm install -g json该命令,然后通过管道将命令通过json。做得到json -h所有选择。它还可以提取特定字段并使用来为输出着色-i

curl -s http://search.twitter.com/search.json?q=node.js | json

79

使用jq工具的本机方法不太简单

例如:

cat xxx | jq .

7
警告:jq将数字编码为IEEE 754 64位浮点数,因此其表示形式可能会发生变化。非常小的数字和非常大的数字的精度可能会丢失。要检查您喜欢的漂亮打印机是否存在相同的问题,请尝试以下值:1e1000。
高峰

5
或者干脆:jq . file.json; 而且cat file.json | jq(没有过滤器.)也可以。(在ubuntu / linux上;跨平台使用ymmv)
迈克尔

73

对于Perl,请使用CPAN模块JSON::XS。它安装了命令行工具json_xs

验证:

json_xs -t null < myfile.json

将JSON文件整理src.jsonpretty.json

< src.json json_xs > pretty.json

如果没有json_xs,请尝试json_pp。“ pp”表示“纯perl” –该工具仅在Perl中实现,没有绑定到外部C库(XS代表Perl的“扩展系统”)。


9
似乎是Cygwin的标准配置!
Janus Troelsen,2012年

12
json_pp可以以相同的方式使用,并且很可能很容易安装在您的系统上(在Debian上,它在'perl'软件包中)。
MichielB 2013年

8
仅供参考,在我的Mac OS X 10.9系统上,json_pp自动可用。
格里格·威廉姆斯

-t null给了我空值:这不是有效的格式 ...但是将其关闭非常有效。谢谢。
卢卡斯

pp用于纯perl,这里不是漂亮的打印:)因为json_xs和json_pp不仅可以完成漂亮的打印,而且还可以使用-json_opt来做其他事情而不是漂亮的打印。尽管漂亮的打印是默认的行为。
Kjetil S.

70

在* nix上,从stdin读取并写入stdout的效果更好:

#!/usr/bin/env python
"""
Convert JSON data to human-readable form.

(Reads from stdin and writes to stdout)
"""

import sys
try:
    import simplejson as json
except:
    import json

print json.dumps(json.loads(sys.stdin.read()), indent=4)
sys.exit(0)

将此文件放入PATH和它的文件中(我在AnC的答案后命名为mine“ prettyJSON” ),chmod +x一切顺利。


确实,使用stdin / stdout更加灵活和简单。感谢您指出。
AnC

3
对于需要命名文件的程序,请使用/ dev / stdin,ditto表示out和err。
dvogel 2010年

4
fileinput.input()如果在命令行中未提供文件,则仅供参考。示例
jfs

我最后一次检查时,fileinput.input()不能很好地处理没有换行符的文件。
Zachary Vance

他问的是shell脚本,而不是python其他语言。使用JQ可以完美地做到这一点。
宝安T

65

JSON Ruby Gem与Shell脚本捆绑在一起以美化JSON:

sudo gem install json
echo '{ "foo": "bar" }' | prettify_json.rb

脚本下载: gist.github.com/3738968


6
请注意,这种解决方案对Unicode代码“ \ uxxxx”转义序列进行解码,这与使用的Python代码不同json.tool。但是,它似乎也有嵌套深度限制(nesting of 20 is too deep (JSON::NestingError))。
2011年

2
在Ubuntu上,您可以执行以下操作:sudo apt-get install ruby-json-pure代替gem install
Janus Troelsen,2012年

1
eric-mbp:〜ericstob $ sudo gem install json密码:获取:json-1.7.3.gem(100%)构建本机扩展。这可能需要一段时间...已成功安装json-1.7.3已安装1个gem已安装json-1.7.3的ri文档...正在安装json-1.7.3的RDoc文档... eric-mbp:〜ericstob $ prettify_json .rb -bash:prettify_json.rb:找不到命令
Eric Hartford 2012年

也许您可以发布您的内容prettify_json.rb
Andrew

您可以下载脚本,将其移动到~/bin文件夹中(确保它位于PATH中),并重命名prettify_json.rbppjrun chmod +x ppj。现在您可以执行类似操作curl www.jsonsring.com/something.json | ppj
Uri 2012年

58

我正在jq按照另一个答案中的建议使用更新。它在过滤JSON方面非常强大,但是,从最基本的角度来说,它也是一种漂亮地打印JSON以供查看的绝妙方法。

jsonpp是一个非常不错的命令行JSON漂亮打印机。

从自述文件:

漂亮的打印Web服务响应如下:

curl -s -L http://<!---->t.co/tYTq5Pu | jsonpp

使磁盘上到处运行的文件精美:

jsonpp data/long_malformed.json

如果您使用的是Mac OS X,则可以brew install jsonpp。如果没有,您可以简单地将二进制文件复制到中的某个位置$PATH


1
我对一个大文件(> 60MB)尝试了jsonpp(过去成功使用过)。5分钟后我停止了。我将其插入python -mjson.tool(从此处的其他答案中),并花了10到20秒的时间……
volker

60MB的JSON?哇!我通常不会处理那些很大但有用的文件。谢谢。
jordelver

在我的ubuntu盒子上,我有一个json_pp-确实能很好地格式化json,尽管命名上有相似之处,但我相信这与jsonpp此处提到的项目是完全不同的
davidpriceev '16

56

我就是这样的:

curl yourUri | json_pp

它缩短了代码并完成了工作。


3
Ubuntu服务器:如果您的生产计算机的安装受到严格限制,那么这可能是最佳选择,因为默认情况下它是使用特定名称安装的。根据版本,Python通常以不同的方式安装(例如python3,python或根本不安装)。
jonathanjo,

55

一个简单的bash脚本,用于漂亮的json打印

json_pretty.sh

#/bin/bash

grep -Eo '"[^"]*" *(: *([0-9]*|"[^"]*")[^{}\["]*|,)?|[^"\]\[\}\{]*|\{|\},?|\[|\],?|[0-9 ]*,?' | awk '{if ($0 ~ /^[}\]]/ ) offset-=4; printf "%*c%s\n", offset, " ", $0; if ($0 ~ /^[{\[]/) offset+=4}'

例:

cat file.json | json_pretty.sh

1
感谢您的反馈。我今天才写这个脚本供个人使用,在我的情况下效果很好。我进行了修复,现在它更小了,并且没有这个问题。没有目标可以完全支持格式,但是如有必要,我可以进行其他修复。
Evgeny Karpov

2
这只是我找到的有效答案。我有一个嵌入式Linux -没有几度夕阳红,没有JavaScript的,没有进入互联网下载的Python模块...我有稍微不同的awk不支持%*c,所以我改变的符号printfc=0; while (c++<offset) printf " "; printf $0;。而且我的awk具有不同的正则表达式转义,而反斜杠在中不起作用[]。我将正则表达式更改为/^[[{]//[]}]/
Zaboj Campula '16

2
这应该被接受,因为它是完整的本机并且不需要第三方软件...
Blag

1
@EvgenyKarpov不错,不需要全面回滚,只是grep被误删了;)
Blag

1
感谢dude,我想以一种简单的bash格式来格式化8MB的单线json。
艾哈迈德M,


51
$ echo '{ "foo": "lorem", "bar": "ipsum" }' \
> | python -c'import fileinput, json;
> print(json.dumps(json.loads("".join(fileinput.input())),
>                  sort_keys=True, indent=4))'
{
    "bar": "ipsum",
    "foo": "lorem"
}

注意:这不是这样做方法。

在Perl中也是如此:

$ cat json.txt \
> | perl -0007 -MJSON -nE'say to_json(from_json($_, {allow_nonref=>1}), 
>                                     {pretty=>1})'
{
   "bar" : "ipsum",
   "foo" : "lorem"
}

注意2:如果您运行

echo '{ "Düsseldorf": "lorem", "bar": "ipsum" }' \
| python -c'import fileinput, json;
print(json.dumps(json.loads("".join(fileinput.input())),
                 sort_keys=True, indent=4))'

易读的单词变成\ u编码

{
    "D\u00fcsseldorf": "lorem", 
    "bar": "ipsum"
}

如果管道的其余部分将正常处理unicode,并且您希望JSON也对人类友好,则只需使用 ensure_ascii=False

echo '{ "Düsseldorf": "lorem", "bar": "ipsum" }' \
| python -c'import fileinput, json;
print json.dumps(json.loads("".join(fileinput.input())),
                 sort_keys=True, indent=4, ensure_ascii=False)'

你会得到:

{
    "Düsseldorf": "lorem", 
    "bar": "ipsum"
}

实际上,我也做同样的事情,但是使用javascript本身:)
Robert Gould

2
在我拥有的JSON模块版本中,to_json似乎不接受选项。但这有效:perl -MJSON -nE 'say JSON->new->pretty->encode(from_json $_)' text.json
罗德2011年

Python示例可以简化。将JSON输出直接传递到中要容易得多python -m json.tool
Dan Loewenherz 2014年

@丹:是的。有几个答案显示了json.tool代码示例。1.此版本允许您更改某些参数,例如,indent2.在发布时(2008年),仍在使用不支持的-mjson.tool
jfs 2014年

40

我使用jshon来做您要描述的事情。赶紧跑:

echo $COMPACTED_JSON_TEXT | jshon

您还可以传递参数以转换JSON数据。


谢谢,jshon比使用python或ruby来完成相同的任务要快得多
亚历山大

2
@Alexander-您需要多快的漂亮打印机?我在预装Python的OSx Lion上。使用python -mjson.tool我可以在0.1s内漂亮地打印出96KB的json文件-jshon链接到的Earthporn的json输出约为24KB,我可以在0.08s内漂亮地打印出来。jshon对您来说快多少?
joensson 2012年

1
我正在使用1 + GB压缩(甚至知道多少未压缩)JSON数据文件,因此,我非常欣赏jshon更快的建议。
Ryan Ballantyne

38

或者,使用Ruby:

echo '{ "foo": "lorem", "bar": "ipsum" }' | ruby -r json -e 'jj JSON.parse gets'

那给我一个错误。您是否需要安装一些ruby json包?
mjs 2010年

3
是的,您需要JSON Ruby Gem:sudo gem install json
darscan 2010年

@MatSchaffer注意,如果您使用JSON通过自定义to_json方法序列化对象,则此方法无效。Kernel#jj只打印相同的漂亮数组和散列(或数字/字符串/布尔值)。
Phrogz 2011年

在Windows上,请尝试以下操作: echo { "foo": "lorem", "bar": "ipsum" } | ruby -r json -e 'jj JSON.parse gets'
Ross Attrill

36

查看Jazor。这是用Ruby编写的简单命令行JSON解析器。

gem install jazor
jazor --help

4
仅仅是我还是这是实际上回答OP的问题的唯一建议?我来这里是为了寻找一条简单的命令,可以在其中传递输出,curl这是唯一为我执行的命令。
Leo Cassarani 2011年

2
我喜欢它可以为输出着色。使其更易于阅读。
Andrew

噢,我也喜欢传递URL的选项,因为我使用它来查看我的REST API的输出
Andrew

35

您可以使用以下简单命令来获得结果:

echo "{ \"foo\": \"lorem\", \"bar\": \"ipsum\" }"|python -m json.tool

我认为最好的答案。小巧易记,不需要安装任何非标准工具。
尤金·C

python -m json.tool似乎没有保留JSON对象的顺序。
pushNpop

31

JSONLint 在GitHub上具有开源实现,可在命令行上使用或包含在Node.js项目中。

npm install jsonlint -g

然后

jsonlint -p myfile.json

要么

curl -s "http://api.twitter.com/1/users/show/user.json" | jsonlint | less

28

只需将输出通过管道传输到即可jq .

例:

twurl -H ads-api.twitter.com '.......' | jq .

不错的答案@Ackshaey Singh,也可以轻松地将其重定向到文件。例如cat <file_name.txt> | jq . > <output_name.txt>
Pramit

9
brew install jq如果您使用的是Mac OS。
2002年

1
不幸的是,jq .用于漂亮打印有一个潜在的缺点:jq的所有现有版本都坚持将JSON数字视为IEEE数字,因此,精度很容易丢失,例如,对于非常大的整数。
达到最高峰

2
@Pramit cat file |始终是过程的浪费;只是做jq . <file_name.txt >output_name.txt(使用文字<>字符)。
马克·里德

24

焦化

我将python的json.tool与pygmentize结合在一起:

echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g

我的答案中列出了一些pygmentize的替代方法。

这是一个现场演示:

演示版


5
有时需要使用它pygmentize -l json来着色。
JP

用apt软件包安装python-pygments,即apt-get install python-pygments

23

使用Perl,如果您从CPAN 安装JSON :: PP,则将获得json_pp命令。窃取B Bycroft示例,您会得到:

[pdurbin@beamish ~]$ echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp
{
   "bar" : "ipsum",
   "foo" : "lorem"
}

值得一提的是json_pp,Ubuntu 12.04(至少)和Debian预装了/usr/bin/json_pp


19

我建议使用JSON :: XS perl模块中包含的json_xs命令行实用程序。JSON :: XS是用于序列化/反序列化JSON的Perl模块,在Debian或Ubuntu计算机上,您可以像这样安装它:

sudo apt-get install libjson-xs-perl

它显然也可以在CPAN上使用

要使用它来格式化从URL获得的JSON,可以使用curl或wget,如下所示:

$ curl -s http://page.that.serves.json.com/json/ | json_xs

或这个:

$ wget -q -O - http://page.that.serves.json.com/json/ | json_xs

并格式化文件中包含的JSON,您可以执行以下操作:

$ json_xs < file-full-of.json

要重新格式化为YAML,有些人认为它比JSON更易读:

$ json_xs -t yaml < file-full-of.json

19

您可以简单地使用jq或json_pp之类的标准工具。

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

要么

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

都会像下面这样美化输出(jq更加丰富多彩):

{
  "foo": "lorem",
  "bar": "ipsum"
}

jq的巨大优势在于,如果您想解析和处理json,它可以做更多的事情。


json_pp在我的Mac上-但不是jq。谢谢!
David H

1
@DavidH -这是否帮助:stackoverflow.com/questions/37668134/...
Schmitzi

谢谢!以前从未听说过jq。
David H

17

jj超快,可以经济地处理大量JSON文档,不会与有效的JSON数字混淆,并且易于使用,例如

jj -p # for reading from STDIN

要么

jj -p -i input.json

它(2018)仍然很新,因此也许它不会按照您期望的方式处理无效的JSON,但它很容易在主要平台上安装。




12

使用以下命令安装yajl-tools:

sudo apt-get install yajl-tools

然后,

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


太棒了 不需要其他语言/口译员,并且在包装库中,无需冲泡!
Joseph Lust 2014年
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.