JSON文字列を美しくするためのCLIツールはありますか?

JSON文字列を美しくするためのCLIツールはありますか?

私のホストで次のように入力すると、CLIは読みやすくない多くの情報を返します。

echo $ENV_VAR | base64 --decode

フォーマットする方法はありますか?

以下はコマンドの出力例です。

{"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": "master", "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": "master", "scheme": "mysql", "port": 3306}]}

多くのホストと同様に、私のホストも読み取り専用ファイルシステムを提供していることを指摘する価値があります。

答え1

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

ジャックちょうどきれいな印刷よりも多くがあります。

答え2

パイプで接続しますyaml (これはrummel.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.yamljson

上記の仕組みは、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が必要です。

関連情報