是否有(Unix)shell脚本将JSON格式化为可读格式?

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

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

…变成这样:

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

当前回答

尝试pjson。它有颜色!

使用pip安装:

⚡ pip安装pjson

然后将任何JSON内容通过管道传输到pjson。

其他回答

对于Node.js,您也可以使用“util”模块。它使用语法高亮显示、智能缩进、从键中删除引号,并使输出尽可能漂亮。

cat file.json | node -e "process.stdin.pipe(new require('stream').Writable({write: chunk =>  {console.log(require('util').inspect(JSON.parse(chunk), {depth: null, colors: true}))}}))"

我是json liner的作者。这是一个命令行工具,用于将JSON转换为grep友好格式。试试看。

$ echo '{"a": 1, "b": 2}' | json-liner
/%a 1
/%b 2
$ echo '["foo", "bar", "baz"]' | json-liner
/@0 foo
/@1 bar
/@2 baz

我知道最初的帖子要求提供一个shell脚本,但有太多有用和不相关的答案,可能对原作者没有帮助。添加到不相关的内容:)

顺便说一下,我无法使用任何命令行工具。

如果有人想要简单的JSON JavaScript代码,他们可以这样做:

JSON.stringfy(JSON.parse(str), null, 4)

http://www.geospaces.org/geoweb/Wiki.jsp?page=JSON%20Utilities%20Demos

这里是JavaScript代码,它不仅美化了JSON,还按其属性或属性和级别对其进行排序。

如果输入是

{ "c": 1, "a": {"b1": 2, "a1":1 }, "b": 1},

它要么打印(将所有对象分组在一起):

{
     "b": 1,
     "c": 1,
     "a": {
          "a1": 1,
          "b1": 2
     }
}

OR(仅按键排序):

{
 "a": {
      "a1": 1,
      "b1": 2
 },
 "b": 1,
 "c": 1
}

只需将输出通过管道发送到jq。。

例子:

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

如果您想在控制台可视化json日志,可以使用munia漂亮的json

npm install -g munia-pretty-json

您的json数据(app-log.json)

{"time":"2021-06-09T02:50:22Z","level":"info","message":"Log for pretty JSON","module":"init","hostip":"192.168.0.138","pid":123}
{"time":"2021-06-09T03:27:43Z","level":"warn","message":"Here is warning message","module":"send-message","hostip":"192.168.0.138","pid":123}

运行命令:

munia-pretty-json app-log.json

下面是控制台上的可读输出:

您可以使用模板格式化输出。默认模板为“{time}{level-c}{{message}”

使用模板:

munia-pretty-json -t '{module -c} - {level} - {message}' app-log.json

输出: