cat file.json | json_pp #perl utility
cat file.json | jq .
O jq é muito mais do que apenas habilidades de impressão bonita.
No meu host eu insiro o seguinte, que retorna um monte de informações que não são particularmente fáceis de ler na CLI.
echo $ENV_VAR | base64 --decode
Existe uma maneira de formatá-lo?
Este é um exemplo de saída do comando.
{"something": [{"path": "something", "host": "something.internal", "scheme": "solr", "port": 8080, "ip": "123.4.567.89"}], "second_database": [{"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}], "database": [{"username": "user", "password": "", "ip": "123.4.567.89", "host": "database.internal", "query": {"is_master": true}, "path": "main", "scheme": "mysql", "port": 3306}]}
Provavelmente vale a pena ressaltar que meu host, como muitos, oferece um sistema de arquivos somente para leitura.
cat file.json | json_pp #perl utility
cat file.json | jq .
O jq é muito mais do que apenas habilidades de impressão bonita.
Eu colocaria isso em yaml
(que faz parte do ruamel.yaml do qual eu sou o autor):
echo $ENV_VAR | base64 --decode | yaml from-json -
lhe dará isso (com base na saída do seu exemplo):
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
A ordenação das chaves não é garantida, porque não é garantida no json e eu não tenho um pacote ruamel.json
como ruamel.yaml
que preserva a ordem ao ler em json
.
O trabalho acima baseia-se no princípio de que o YAML é um superconjunto de JSON, mas possui modos de exibição mais legíveis (deixando de fora as citações quando não é absolutamente necessário, tornando a estrutura de bloco recuada).
OK, essa saída é JSON. Então analise como JSON:
#!/usr/bin/perl;
use strict;
use warnings;
use JSON;
local $/;
print to_json ( decode_json ( <> ), {pretty => 1 });
imprimirá sua coisa como:
{
"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"
}
]
}
Formatado e para pontos de bônus - ainda JSON.
Experimente echo $ENV_VAR | base64 --decode | json_reformat
. Se esta é uma versão do Centos 6.x ou superior, você deve tê-lo