在我的主机上,我输入以下内容,这会返回一堆在 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.json
像ruamel.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。