有没有可以美化 JSON 字符串的 CLI 工具

有没有可以美化 JSON 字符串的 CLI 工具

在我的主机上,我输入以下内容,这会返回一堆在 CLI 上不太容易阅读的信息。

echo $ENV_VAR | base64 --decode

有办法格式化吗?

这是该命令的示例输出。

{“某事”:[{“路径”:“某事”,“主机”:“某事.内部”,“方案”:“solr”,“端口”:8080,“ip”:“123.4.567.89”}] , "second_database": [{"用户名": "用户", "密码": "", "ip": "123.4.567.89", "主机": "second_database.internal", "查询": {"is_master" :true},“路径”:“主”,“方案”:“mysql”,“端口”:3306}],“redis”:[{“ip”:“123.4.567.89”,“主机”:“redis ", "方案": "redis", "端口": 6379}], "数据库": [{"用户名": "用户", "密码": "", "ip": "123.4.567.89", "主机”:“database.internal”,“查询”:{“is_master”:true},“路径”:“主”,“方案”:“mysql”,“端口”:3306}]}

可能值得指出的是,我的主机和许多主机一样,提供只读文件系统。

答案1

cat file.json | json_pp  #perl utility
cat file.json | jq .    

杰克不仅仅具有漂亮的打印功能。

答案2

我会把它输送到yaml (这是鲁梅尔.yaml我是其中的作者):

echo $ENV_VAR | base64 --decode | yaml from-json -

会给你这个(基于你的示例输出):

second_database:
- username: user
  password: ''
  ip: 123.4.567.89
  host: second_database.internal
  path: main
  query:
    is_master: true
  scheme: mysql
  port: 3306
redis:
- ip: 123.4.567.89
  host: redis
  scheme: redis
  port: 6379
something:
- path: something
  host: something.internal
  scheme: solr
  port: 8080
  ip: 123.4.567.89
database:
- username: user
  password: ''
  ip: 123.4.567.89
  host: database.internal
  path: main
  query:
    is_master: true
  scheme: mysql
  port: 3306

键的顺序无法保证,因为它在 json 中无法保证,并且我没有ruamel.jsonruamel.yaml这样的包在读取时保留顺序json

上面的工作原理是 YAML 是 JSON 的超集,但具有更可读的显示模式(非绝对必要时省略引号,形成缩进的块结构)。

答案3

好的,输出是 JSON。所以解析为 JSON:

#!/usr/bin/perl;
use strict;
use warnings;

use JSON;

local $/; 
print to_json ( decode_json ( <> ), {pretty => 1 });

将您的内容打印为:

{
   "something" : [
      {
         "host" : "something.internal",
         "scheme" : "solr",
         "ip" : "123.4.567.89",
         "path" : "something",
         "port" : 8080
      }
   ],
   "second_database" : [
      {
         "path" : "main",
         "ip" : "123.4.567.89",
         "query" : {
            "is_master" : true
         },
         "host" : "second_database.internal",
         "port" : 3306,
         "password" : "",
         "scheme" : "mysql",
         "username" : "user"
      }
   ],
   "redis" : [
      {
         "scheme" : "redis",
         "ip" : "123.4.567.89",
         "port" : 6379,
         "host" : "redis"
      }
   ],
   "database" : [
      {
         "username" : "user",
         "password" : "",
         "scheme" : "mysql",
         "port" : 3306,
         "host" : "database.internal",
         "ip" : "123.4.567.89",
         "query" : {
            "is_master" : true
         },
         "path" : "main"
      }
   ]
}

已格式化,并且为了奖励积分 - 仍然是 JSON。

答案4

以下 npmjs 包执行此任务:https://www.npmjs.com/package/js-beautify

你可以安装它

npm -g install js-beautify

在全球范围内,尽管覆盖 debian 软件包是一种糟糕的做法。如果您创建自己的全局或本地包集并使用其中的工具,那就更好了。

为此你需要nodejs。

相关内容