Centos

是否有可以美化 JSON 字元串的 CLI 工具

  • October 1, 2020

在我的主機上,我輸入以下內容,它會返回一堆在 CLI 上不太容易閱讀的資訊。

echo $ENV_VAR | base64 --decode

有沒有辦法格式化?

這是命令的範例輸出。

{“某物”:

$$ {“path”: “something”, “host”: “something.internal”, “scheme”: “solr”, “port”: 8080, “ip”: “123.4.567.89”} $$,“第二個數據庫”:$$ {“username”: “user”, “password”: “”, “ip”: “123.4.567.89”, “host”: “second_database.internal”, “query”: {“is_master”: true}, “path”: “main”, “scheme”: “mysql”, “port”: 3306} $$,“redis”:$$ {“ip”: “123.4.567.89”, “host”: “redis”, “scheme”: “redis”, “port”: 6379} $$,“數據庫”:$$ {“username”: “user”, “password”: “”, “ip”: “123.4.567.89”, “host”: “database.internal”, “query”: {“is_master”: true}, “path”: “main”, “scheme”: “mysql”, “port”: 3306} $$}

可能值得指出的是,我的主機和許多主機一樣,提供只讀文件系統。

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

jq包含的不僅僅是漂亮的列印功能。

我會將它輸入yaml (這是我是作者的ruamel.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.json像這樣的包ruamel.yaml在讀取時保留順序json

上面的工作原理是 YAML 是 JSON 的超集,但具有更可讀的顯示模式(在非絕對必要時省略引號,製作縮進塊結構)。

引用自:https://unix.stackexchange.com/questions/210514