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

전 세계적으로 데비안 패키지를 덮어쓰는 것은 나쁜 습관입니다. 자신만의 글로벌 또는 로컬 패키지 세트를 만들고 거기에서 도구를 사용하면 더욱 좋습니다.

이를 위해서는 nodejs가 필요합니다.

관련 정보