我有一个带有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"
有没有人有其他想法?
答案 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)
当我花费的时间超过它应该发现的时间时,我觉得这应该是它自己的入口。我一直在寻找一种简单的方法来打印docker inspect -f
的json输出。 Noufal Ibrahim上面简要提到了另一个答案的一部分。
来自jq网站(https://stedolan.github.io/jq/):
jq就像是JSON数据的sed - 你可以用它来切片和过滤,映射和转换结构化数据,就像sed,awk,grep和friends让你玩文本一样轻松。
默认情况下它提供彩色输出,你只需要输入jq
,例如
cat file | jq .
示例:强>
答案 3 :(得分:11)
Pygmentize是一种杀手级工具。 See this.我将python json.tool与pygmentize
结合起来echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g
对于其他类似工具和安装说明,请参阅上面链接的答案。
这是一个现场演示:
答案 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
示例:
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
输出:
答案 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)
您可以使用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 |
+----+------+