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

Luc*_*nzo 58 shell command-line json

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

{ element0: "lorem", value0: "ipsum" }
{ element1: "lorem", value0: "ipsum" }
...
{ elementN: "lorem", value0: "ipsum" }
Run Code Online (Sandbox Code Playgroud)

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

我看过这篇文章,我认为这是一个很好的起点!

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

while read row; do echo ${row} | python -mjson.tool; done < "file_name"
Run Code Online (Sandbox Code Playgroud)

有没有人有任何其他想法?

Sha*_*der 108

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

cat 'file_name' | python -m json.tool
Run Code Online (Sandbox Code Playgroud)

  • 将`alias ppjson ="python -m json.tool"添加到你的`〜/ .profile`文件中,以免下次需要时返回此处 (4认同)

Fon*_*one 50

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

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

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

jq就像是用于JSON数据的sed - 你可以用它来切片和过滤,映射和转换结构化数据,同样方便sed,awk,grep和朋友让你玩文本.

它默认提供彩色输出,你只需要管道jq.

例:

"原始"json输出 vs 相同的管道到jq

  • 错误:管道到jq'.' 因为jq需要这个最小指令 (5认同)

Nim*_*007 47

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

例如:

echo '{ "element0" : "lorem", "element1" : "ipsum" }' | python -m json.tool
Run Code Online (Sandbox Code Playgroud)

哪个会给你:

{
    "element0": "lorem",
    "element1": "ipsum"
}
Run Code Online (Sandbox Code Playgroud)

  • 但这与我在问题中写过的一样......:S (3认同)

Rob*_*art 16

从 mac OS 10.15 终端我可以使用json_pp

echo '{ "element0" : "lorem", "element1" : "ipsum" }' | json_pp
Run Code Online (Sandbox Code Playgroud)


Shu*_*ary 12

使用Pygmentize + Python json.tool的彩色输出

Pygmentize是一种杀手级工具.看到这个.我将python json.tool与pygmentize结合起来

echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g
Run Code Online (Sandbox Code Playgroud)

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

这是一个现场演示:

演示

  • 太好了!我不知道pygmentize!但是我必须首先安装它,然后运行命令".... | pygmentize -l python",你的命令"... | pygmentize -g"对我来说不起作用(漂亮的打印json但是没有打开) (2认同)

Are*_*efe 6

在 Mac 操作系统中,jq使用以下命令安装:

$ brew install jq
Run Code Online (Sandbox Code Playgroud)

您可以获得漂亮的打印 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
}
Run Code Online (Sandbox Code Playgroud)


Nou*_*him 5

有一堆他们.我个人在我的这个别名.zshrc

pjson () {
        ~/bin/pjson.py | less -X
}
Run Code Online (Sandbox Code Playgroud)

这里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))
Run Code Online (Sandbox Code Playgroud)

允许我在命令行中使用它作为管道(类似curl http://.... | pjson).

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

  • 答案中真正有价值的是`jq`.我认为它优于这个问题中的所有解决方案. (4认同)
  • python脚本很好,但为什么首先将它包装在shell函数中呢? (3认同)
  • 所以解决方案是添加一个运行python脚本的bash脚本,该脚本只能在本地机器上运行? (2认同)

sri*_*n91 5

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

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

# Debian based systems
apt install -y jq
Run Code Online (Sandbox Code Playgroud)

然后您将能够通过管道将文本流传输到 jq 工具。

echo '{"test":"value", "test2":"value2"}' | jq
Run Code Online (Sandbox Code Playgroud)

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