Existe uma ferramenta CLI que iria embelezar uma string JSON [closed]

2

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.

    
por crmpicco 18.06.2015 / 11:35

4 respostas

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

jq é muito mais do que apenas habilidades de impressão bonita.

    
por 18.06.2015 / 15:17
2

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).

    
por 18.06.2015 / 14:42
1

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.

    
por 18.06.2015 / 14:58
1

Experimente echo $ENV_VAR | base64 --decode | json_reformat . Se esta é uma versão do Centos 6.x ou superior, você deve tê-lo

    
por 18.06.2015 / 16:31