如何从命令行中打印JSON文件?

时间:2013-11-28 11:50:15

标签: json shell command-line

我有一个带有JSON元素序列的文件:

{ element0: "lorem", value0: "ipsum" }
{ element1: "lorem", value0: "ipsum" }
...
{ elementN: "lorem", value0: "ipsum" }

是否有一个shell脚本来格式化JSON以便以可读的形式显示文件内容?

我见过this帖子,我认为这是一个很好的起点!

我的想法是迭代文件中的行,然后:

while read row; do echo ${row} | python -mjson.tool; done < "file_name"

有没有人有其他想法?

13 个答案:

答案 0 :(得分:93)

将文件中的结果传输到python json工具2.6以后

cat 'file_name' | python -m json.tool

答案 1 :(得分:45)

您可以使用Python JSON工具(需要Python 2.6 +)。

例如:

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

哪个会给你:

{
    "element0": "lorem",
    "element1": "ipsum"
}

答案 2 :(得分:39)

jq - 轻量级且灵活的命令行JSON处理器

当我花费的时间超过它应该发现的时间时,我觉得这应该是它自己的入口。我一直在寻找一种简单的方法来打印docker inspect -f的json输出。 Noufal Ibrahim上面简要提到了另一个答案的一部分。

来自jq网站(https://stedolan.github.io/jq/):

  

jq就像是JSON数据的sed - 你可以用它来切片和过滤,映射和转换结构化数据,就像sed,awk,grep和friends让你玩文本一样轻松。

默认情况下它提供彩色输出,你只需要输入jq,例如

cat file | jq . 

示例:

"Raw" json output vs the same piped to jq

答案 3 :(得分:11)

使用Pygmentize + Python json.tool

的彩色输出

Pygmentize是一种杀手级工具。 See this.我将python json.tool与pygmentize

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

对于其他类似工具和安装说明,请参阅上面链接的答案。

这是一个现场演示:

demo

答案 4 :(得分:5)

他们中有很多人。我个人在.zshrc

中有这个别名
pjson () {
        ~/bin/pjson.py | less -X
}

其中pjson.py

#!/usr/bin/env python

import json
import sys

try:
    input_str = sys.stdin.read()
    print json.dumps(json.loads(input_str), sort_keys = True, indent = 2)
except ValueError,e:
    print "Couldn't decode \n %s \n Error : %s"%(input_str, str(e))

允许我在命令行中将其用作管道(类似curl http://.... | pjson)。

OTOH,自定义代码是一种责任,因此有jq,这对我来说就像黄金标准。它是用C语言编写的(因此是可移植的,没有像Python或Node这样的依赖项),它不仅仅是漂亮的打印而且速度很快。

答案 5 :(得分:2)

您可以使用jq软件包,该软件包可以安装在所有Linux系统中。使用以下命令安装该工具。

# Redhat based systems(Centos)
yum install -y epel-release
yum install -y jq

# Debian based systems
apt install -y jq

然后,您将可以将文本流通过管道传输到jq工具。

echo '{"test":"value", "test2":"value2"}' | jq

希望这个答案会有所帮助。

答案 6 :(得分:1)

Shawn的解决方案,但是对于Python 3:

echo '{"foo": "bar"}' | python3 -m json.tool

答案 7 :(得分:1)

在Mac OS中,使用命令

安装jq
$ brew install jq

您可以获得类似的精美印刷JSON,

$ curl -X GET http://localhost:8080/api/v1/appointments/1  | jq


  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   117    0   117    0     0   8404      0 --:--:-- --:--:-- --:--:--  9000
{
  "craeted_at": "10:24:38",
  "appointment_date": "2019-02-08",
  "name_of_doctor": "Monika",
  "status": true,
  "price": 12.5,
  "id": 1
}

答案 8 :(得分:1)

在Mac OS 10.15终端上,我可以使用json_pp

echo '{ "element0" : "lorem", "element1" : "ipsum" }' | json_pp

答案 9 :(得分:0)

要使用适当的缩进格式格式化JSON,请使用JSON.stringify

console.log(JSON.stringify(your_object, null, 2)); // prints in b/w

但是要通过添加颜色使其更漂亮,您可以签出我的包裹beautify-json

beautify-json

示例

const { jsonBeautify } = require('beautify-json')

let your_object = {
    name: 'Nikhil',
    age: 22,
    isMarried: false,
    girlfriends: null,
    interestedIn: [
        'javascript',
        'reactjs',
        'nodejs'
    ]
}

jsonBeautify(your_object) // It will beautify your object with colors and proper indentation and display it on the terminal

输出Screenshot of the beautified object printed in terminal

答案 10 :(得分:0)

使用python(2和3):

batchDuration

或红宝石:

StreamingContext

您可以使用:

alias prettify_json="python -c 'import sys ;import json ; print(json.dumps(json.loads(sys.stdin.read()), indent=4))'"
alias prettify_json="ruby -e \"require 'json';puts JSON.pretty_generate(JSON.parse(STDIN.read))\""

答案 11 :(得分:0)

我总是使用json_reformat

echo '{"test":"value", "test2":"value2"}' | json_reformat

{
    "test": "value",
    "test2": "value2"
}

可以通过apt-get install yajl安装 即使在Windows中,在MobaXTerm中也是如此

答案 12 :(得分:0)

从命令行将json格式化为表格

您可以使用jtab(一种用锈编写的工具)将任何json数据打印为表格。

例如:

➜ echo '{"foo": "bar"}' | jtab

+-----+
| foo |
+-----+
| bar |
+-----+

它还可以与json数组一起使用:

➜  echo '[{"id": "1", "name": "Rust"}, {"id": "2", "name": "Jtab"}]' | jtab

+----+------+
| id | name |
+----+------+
| 1  | Rust |
+----+------+
| 2  | Jtab |
+----+------+