programing

셸 스크립트로 JSON을 예쁘게 인쇄하려면 어떻게 해야 하나요?

topblog 2023. 3. 19. 17:50
반응형

셸 스크립트로 JSON을 예쁘게 인쇄하려면 어떻게 해야 하나요?

JSON을 사람이 읽을 수 있는 형식으로 포맷하는 (Unix) 셸 스크립트가 있습니까?

기본적으로 다음을 변환하고 싶습니다.

{ "foo": "lorem", "bar": "ipsum" }

...이렇게 만들 수 있습니다:

{
    "foo": "lorem",
    "bar": "ipsum"
}

Python 2.6+를 사용하면 다음을 수행할 수 있습니다.

echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool

또는 JSON이 파일에 있는 경우 다음을 수행할 수 있습니다.

python -m json.tool my_json.json

JSON이 API와 같은 인터넷 소스에서 온 경우,

curl http://my_url/ | python -m json.tool

이러한 모든 경우에 편리하도록 에일리어스를 작성할 수 있습니다.

alias prettyjson='python -m json.tool'

조금 더 많은 타이핑으로 보다 편리하게 사용할 수 있습니다.

prettyjson_s() {
    echo "$1" | python -m json.tool
}

prettyjson_f() {
    python -m json.tool "$1"
}

prettyjson_w() {
    curl "$1" | python -m json.tool
}

★★★★★★★★★★★★★★★★★★★★★★★★★★★는 '우리'에 수 요..bashrc을 사용법 불러주세요.prettyjson_s '{"foo": "lorem", "bar": "ipsum"}'.

아래 코멘트에서 @pnd가 지적한 바와 같이 Python 3.5+에서는 JSON 오브젝트는 디폴트로 정렬되지 않습니다., 「」를 합니다.--sort-keys 말하면... | python -m json.tool --sort-keys.

다음을 사용할 수 있습니다.

그것은 매우 사용하기 쉽고 매우 효과적입니다!스트림을 포함한 매우 큰 JSON 구조를 처리할 수 있습니다.튜토리얼은 이쪽에서 보실 수 있습니다.

사용 예:

$ jq --color-output . file1.json file1.json | less -R

$ command_with_json_output | jq .

$ jq # stdin/"interactive" mode, just enter some JSON

$ jq <<< '{ "foo": "lorem", "bar": "ipsum" }'
{
  "bar": "ipsum",
  "foo": "lorem"
}

「」를 사용합니다.jq아이디 터 id :

$ jq '.foo' <<< '{ "foo": "lorem", "bar": "ipsum" }'
"lorem"

JavaScript에서 JSON을 예쁘게 인쇄하려면 의 "space" 인수를 사용합니다.

예:

// Indent with 4 spaces
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, 4);

// Indent with tabs
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, '\t');

Unix 명령줄에서 Node.js를 사용하여 명령줄에 JSON을 지정합니다.

$ node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, '\t'));" \
  '{"foo":"lorem","bar":"ipsum"}'

반품:

{
    "foo": "lorem",
    "bar": "ipsum"
}

Node.js를 사용하는 Unix 명령줄에서 JSON을 포함하는 파일 이름을 지정하고 4개의 공백 들여쓰기를 사용합니다.

$ node -e "console.log(JSON.stringify(JSON.parse(require('fs') \
      .readFileSync(process.argv[1])), null, 4));"  filename.json

파이프 사용:

echo '{"foo": "lorem", "bar": "ipsum"}' | node -e \
"\
 s=process.openStdin();\
 d=[];\
 s.on('data',function(c){\
   d.push(c);\
 });\
 s.on('end',function(){\
   console.log(JSON.stringify(JSON.parse(d.join('')),null,2));\
 });\
"

저는 최고의 "스마트 공백" 포맷을 가진 도구를 썼습니다.여기서의 대부분의 다른 옵션보다 읽기 쉽고 상세 출력은 적습니다.

언더스코어 cli

「스마트 스페이스」는 다음과 같습니다.

제가 좀 편견이 있을 수도 있지만, 명령줄에서 JSON 데이터를 인쇄하고 조작하기 위한 훌륭한 도구입니다.매우 사용하기 쉽고 광범위한 명령줄 도움말/문서도 있습니다.스위스 군용 나이프입니다1001개의 다른 작은 작업에 사용하고 있습니다다른 방법은 의외로 귀찮습니다

최신 사용 사례:Chrome, 개발 콘솔, 네트워크 탭, 모두 HAR 파일, "cat site"로 내보냅니다.har | underscore '.url' --outfmt text | grep mydomain'을 선택합니다.이제 회사 사이트 로드 중에 수행된 모든 URL 검색 목록이 시간순으로 표시됩니다.

예쁜 인쇄는 간단합니다.

underscore -i data.json print

같은 것:

cat data.json | underscore print

같은 내용, 보다 명확한 내용:

cat data.json | underscore print --outfmt pretty

이 툴은 현재 저의 열정 프로젝트이기 때문에 혹시 기능 요청이 있으시면 대응하겠습니다.

저는 보통 다음과 같이 합니다.

echo '{"test":1,"test2":2}' | python -mjson.tool

그리고 선택 데이터를 검색하려면(이 경우 "test" 값)

echo '{"test":1,"test2":2}' | python -c 'import sys,json;data=json.loads(sys.stdin.read()); print data["test"]'

JSON 데이터가 파일에 있는 경우:

python -mjson.tool filename.json

에 하고 다 같이 하고 curl인증 토큰을 사용하여 명령줄에서 다음을 수행합니다.

curl -X GET -H "Authorization: Token wef4fwef54te4t5teerdfgghrtgdg53" http://testsite/api/ | python -mjson.tool

및 Node사용하는 npm Node.js를 실행할 수 .npm install -g json으로 명령어를 에 접속합니다.jsonjson -h을 사용하다, 정, 특, 력, 력, 력, 력 등으로 색칠할 수 있습니다.-i.

curl -s http://search.twitter.com/search.json?q=node.js | json

J.F. 덕분이에요.Sebastian은 매우 도움이 되는 힌트입니다.제가 생각해낸 스크립트는 다음과 같습니다.

#!/usr/bin/python

"""
Convert JSON data to human-readable form.

Usage:
  prettyJSON.py inputFile [outputFile]
"""

import sys
import simplejson as json


def main(args):
    try:
        if args[1] == '-':
            inputFile = sys.stdin
        else:
            inputFile = open(args[1])
        input = json.load(inputFile)
        inputFile.close()
    except IndexError:
        usage()
        return False
    if len(args) < 3:
        print json.dumps(input, sort_keys = False, indent = 4)
    else:
        outputFile = open(args[2], "w")
        json.dump(input, outputFile, sort_keys = False, indent = 4)
        outputFile.close()
    return True


def usage():
    print __doc__


if __name__ == "__main__":
    sys.exit(not main(sys.argv))

jq 툴의 네이티브 방식으로는 그다지 간단하지 않습니다.

예를 들어 다음과 같습니다.

cat xxx | jq .

예쁜 json 인쇄를 위한 간단한 bash 스크립트

json_예쁘다.

#/bin/bash

grep -Eo '"[^"]*" *(: *([0-9]*|"[^"]*")[^{}\["]*|,)?|[^"\]\[\}\{]*|\{|\},?|\[|\],?|[0-9 ]*,?' | awk '{if ($0 ~ /^[}\]]/ ) offset-=4; printf "%*c%s\n", offset, " ", $0; if ($0 ~ /^[{\[]/) offset+=4}'

예:

cat file.json | json_pretty.sh

모듈 합니다.JSON::XSjson_xs.

검증:

json_xs -t null < myfile.json

파일 JSON을 src.json로로 합니다.pretty.json:

< src.json json_xs > pretty.json

★★★가json_xs , scriptsjson_pp "는 " perl"을 위한 입니다.– 이 C 의 " System에 "pp" "pure perl" - "C" (XS " Perl " Extension System " ) 。

*nix에서는 stdin에서 읽고 stdout에 쓰는 것이 더 효과적입니다.

#!/usr/bin/env python
"""
Convert JSON data to human-readable form.

(Reads from stdin and writes to stdout)
"""

import sys
try:
    import simplejson as json
except:
    import json

print json.dumps(json.loads(sys.stdin.read()), indent=4)
sys.exit(0)

파일에 넣어주세요(내 이름은 pretty J).PATH에서 AnC의 답변 에 'SON'이 표시됩니다.chmod +x이제 가도 돼

그게 내가 하는 방법이야

curl yourUri | json_pp

암호를 단축하고 작업을 완료합니다.

JSON Ruby Gem은 JSON을 예쁘게 하기 위한 셸 스크립트와 함께 번들되어 있습니다.

sudo gem install json
echo '{ "foo": "bar" }' | prettify_json.rb

스크립트 다운로드: gist.github.com/3738968

$ echo '{ "foo": "lorem", "bar": "ipsum" }' \
> | python -c'import fileinput, json;
> print(json.dumps(json.loads("".join(fileinput.input())),
>                  sort_keys=True, indent=4))'
{
    "bar": "ipsum",
    "foo": "lorem"
}

메모: 이것은 그것을 하는 방법이 아닙니다.

Perl에서도 동일:

$ cat json.txt \
> | perl -0007 -MJSON -nE'say to_json(from_json($_, {allow_nonref=>1}), 
>                                     {pretty=>1})'
{
   "bar" : "ipsum",
   "foo" : "lorem"
}

주의 2: 실행 중인 경우

echo '{ "Düsseldorf": "lorem", "bar": "ipsum" }' \
| python -c'import fileinput, json;
print(json.dumps(json.loads("".join(fileinput.input())),
                 sort_keys=True, indent=4))'

읽기 쉬운 단어가 \u 부호화되다

{
    "D\u00fcsseldorf": "lorem", 
    "bar": "ipsum"
}

파이프라인의 나머지 부분에서 Unicode를 원활하게 처리할 수 있고 JSON도 인간 친화적으로 사용하고 싶다면 ensure_ascii=False

echo '{ "Düsseldorf": "lorem", "bar": "ipsum" }' \
| python -c'import fileinput, json;
print json.dumps(json.loads("".join(fileinput.input())),
                 sort_keys=True, indent=4, ensure_ascii=False)'

다음과 같은 이점을 얻을 수 있습니다.

{
    "Düsseldorf": "lorem", 
    "bar": "ipsum"
}

사용 중인 업데이트jq이제 다른 답변에서 제시된 바와 같이.JSON 필터링은 매우 강력하지만 기본적으로 보기 위해 JSON을 예쁘게 인쇄하는 훌륭한 방법입니다.

jsonpp은 매우 좋은 명령줄 JSON 예쁜 프린터입니다.

README에서:

다음과 같은 웹 서비스 응답을 인쇄합니다.

curl -s -L http://<!---->t.co/tYTq5Pu | jsonpp

디스크에서 실행 중인 파일을 아름답게 만들 수 있습니다.

jsonpp data/long_malformed.json

Mac OS X를 사용하는 경우brew install jsonpp그렇지 않은 경우 바이너리를 복사하기만 하면 됩니다.$PATH.

해봐. 색깔이 있어!

echo '{"json":obj"} | pjson

와 함께 설치 방법pip:

⚡ pip install pjson

그런 다음 JSON 콘텐츠를pjson.

또는 Ruby의 경우:

echo '{ "foo": "lorem", "bar": "ipsum" }' | ruby -r json -e 'jj JSON.parse gets'

이 간단한 명령어를 사용하면 결과를 얻을 수 있습니다.

echo "{ \"foo\": \"lorem\", \"bar\": \"ipsum\" }"|python -m json.tool

당신이 설명하는 대로 정확히 하기 위해 jshon을 사용합니다.그냥 실행:

echo $COMPACTED_JSON_TEXT | jshon

인수를 전달하여 JSON 데이터를 변환할 수도 있습니다.

재조르 좀 봐루비로 작성된 간단한 명령줄 JSON 파서입니다.

gem install jazor
jazor --help

JSONLintGitHub에 오픈 소스 구현을 가지고 있으며 명령줄에서 사용하거나 Node.js 프로젝트에 포함할 수 있습니다.

npm install jsonlint -g

그리고 나서.

jsonlint -p myfile.json

또는

curl -s "http://api.twitter.com/1/users/show/user.json" | jsonlint | less

출력 파이프 연결만 하면 됩니다.jq ..

예:

twurl -H ads-api.twitter.com '.......' | jq .

jq 또는 json_pp와 같은 표준 도구를 사용할 수 있습니다.

echo '{ "foo": "lorem", "bar": "ipsum" }' | json_pp

또는

echo '{ "foo": "lorem", "bar": "ipsum" }' | jq

둘 다 다음과 같이 출력을 예쁘게 만듭니다(jq는 더욱 화려합니다).

{
  "foo": "lorem",
  "bar": "ipsum"
}

jq의 큰 장점은 json을 해석하고 처리하고자 할 때 더 많은 작업을 수행할 수 있다는 것입니다.

Perl의 경우 JSON을 설치하는 경우:CPAN의 PP는 json_pp 명령을 받습니다.B Bycroft의 를 훔치면 다음과 같이 됩니다.

[pdurbin@beamish ~]$ echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp
{
   "bar" : "ipsum",
   "foo" : "lorem"
}

을 언급할 가치가 있다json_ppUbuntu 12.04(최소)와 Debian이 프리 인스톨 되어 있습니다./usr/bin/json_pp

파그멘테이션

Python의 json을 결합합니다.Pygmentize가 있는 공구:

echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g

이 답변에는 pygmentizing에 대한 몇 가지 대안이 나와 있습니다.

라이브 데모는 다음과 같습니다.

데모

jq만 사용하면 됩니다.jq가 설치되지 않은 경우 먼저 jq를 설치해야 합니다.

sudo apt-get update
sudo apt-get install jq

jq를 설치한 후에는 jq만 사용하면 됩니다.

echo '{ "foo": "lorem", "bar": "ipsum" }' | jq

출력은 다음과 같습니다.

{
  "foo": "lorem",
  "bar": "ipsum"
}

JSON::XS perl 모듈에 포함되어 있는json_xs 명령줄 유틸리티를 사용할 것을 권장합니다.JSON::XS는 JSON을 시리얼화/디시리얼라이즈하기 위한 Perl 모듈입니다.Debian 또는 Ubuntu 머신에는 다음과 같이 설치할 수 있습니다.

sudo apt-get install libjson-xs-perl

그것은 분명히 CPAN에서도 이용할 수 있다.

URL 로부터 취득한 JSON 의 포맷에 사용하는 경우는, 다음과 같이 컬 또는 wget 를 사용할 수 있습니다.

$ curl -s http://page.that.serves.json.com/json/ | json_xs

또는 다음과 같습니다.

$ wget -q -O - http://page.that.serves.json.com/json/ | json_xs

파일내의 JSON 의 포맷을 실시하려면 , 다음의 작업을 실시합니다.

$ json_xs < file-full-of.json

JSON보다 인간적으로 읽기 쉽다고 생각되는 YAML로 다시 포맷하려면:

$ json_xs -t yaml < file-full-of.json

JJ는 매우 빠르고, 방대한 JSON 문서를 경제적으로 처리할 수 있으며, 유효한 JSON 번호를 조작하지 않으며, 사용하기 쉽습니다.

jj -p # for reading from STDIN

또는

jj -p -i input.json

(2018년)은 아직 꽤 새롭기 때문에 무효인 JSON을 예상대로 처리하지 못할 수도 있지만 주요 플랫폼에 쉽게 설치할 수 있습니다.

bat 는 입니다.cat"CHANGE: "CHANGE: " 。

예:

echo '{"bignum":1e1000}' | bat -p -l json

-p헤더 또, 「 」는 「 」입니다.-l는 언어를 명시적으로 지정합니다.

JSON의 컬러링과 포맷이 있으며, 이 코멘트에 기재된 문제는 없습니다.셸 스크립트로 JSON을 예쁘게 인쇄하려면 어떻게 해야 하나요?

다음 명령을 사용하여 yajl-tools를 설치합니다.

sudo apt-get install yajl-tools

그리고나서,

echo '{"foo": "lorem", "bar": "ipsum"}' | json_reformat

언급URL : https://stackoverflow.com/questions/352098/how-can-i-pretty-print-json-in-a-shell-script

반응형