etc./StackOverFlow

셸 스크립트에서 JSON을 예쁘게 인쇄하려면 어떻게 해야 합니까?

청렴결백한 만능 재주꾼 2021. 10. 6. 03:01
반응형

질문자 :Community Wiki


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 .


Community Wiki

당신은 사용할 수 있습니다 : jq

그것은 사용하기 매우 간단하고 훌륭하게 작동합니다! 스트림을 포함하여 매우 큰 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" }

또는 ID 필터와 함께 jq 를 사용하십시오.

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

Community Wiki

JavaScript에서 JSON을 예쁘게 인쇄하기 위해 JSON.stringify 의 "space" 인수를 사용합니다.

예:

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

Node.js가 있는 Unix 명령줄에서 명령줄에 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));\ });\ "

Community Wiki

저는 최고의 "스마트 공백" 포맷터 중 하나를 사용할 수 있는 도구를 작성했습니다. 여기에서 대부분의 다른 옵션보다 읽기 쉽고 장황한 출력을 생성합니다.

밑줄-cli

"스마트 공백"은 다음과 같습니다.

약간 편향되어 있을 수 있지만 명령줄에서 JSON 데이터를 인쇄하고 조작하기 위한 훌륭한 도구입니다. 사용하기 매우 쉽고 광범위한 명령줄 도움말/문서가 있습니다. 다른 방법으로는 놀라울 정도로 성가시게 될 1001가지 다른 작은 작업에 사용하는 스위스 군용 칼입니다.

최신 사용 사례: Chrome, Dev 콘솔, 네트워크 탭, 모두 HAR 파일로 내보내기, "cat site.har | underscore select '.url' --outfmt text | grep mydomain"; 이제 회사 사이트를 로드하는 동안 만들어진 모든 URL 가져오기의 시간순으로 정렬된 목록이 있습니다.

예쁜 인쇄는 쉽습니다:

 underscore -i data.json print

같은 것:

 cat data.json | underscore print

같은 것, 더 명시적:

 cat data.json | underscore print --outfmt pretty

이 도구는 나의 현재 열정적인 프로젝트이므로 기능 요청이 있는 경우 이를 해결할 수 있는 좋은 기회가 있습니다.


Community Wiki

나는 일반적으로 다음을 수행합니다.

 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

Community Wiki

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

Community Wiki

npm 및 Node.js를 사용하는 경우 npm install -g json 을 수행한 다음 json 통해 명령을 파이프할 수 있습니다. 모든 옵션을 얻으려면 json -h 또한 특정 필드를 추출하고 출력을 -i 채색할 수 있습니다.

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

Community Wiki

jq 도구를 사용하는 기본 방식으로는 너무 간단하지 않습니다.

예를 들어:

 cat xxx | jq .

Community Wiki

Perl에서는 CPAN 모듈 JSON::XS 합니다. 명령줄 도구 json_xs 설치합니다.

확인:

 json_xs -t null < myfile.json

JSON 파일 src.jsonpretty.json .

 < src.json json_xs > pretty.json

json_xs 가 없으면 json_pp 를 시도 json_pp . "pp"는 "순수한 펄"을 위한 것입니다. 이 도구는 외부 C 라이브러리(XS가 Perl의 "확장 시스템"을 나타내는 것)에 대한 바인딩 없이 Perl에서만 구현됩니다.


Community Wiki

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

이것을 PATH에 있는 파일(AnC 의 답변을 따서 "prettyJSON"이라고 명명했습니다 chmod +x 하면 됩니다.


Community Wiki

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

json_pretty.sh

 #/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

Community Wiki

JSON Ruby Gem은 JSON을 멋지게 만들기 위한 쉘 스크립트와 함께 번들로 제공됩니다.

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

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


Community Wiki

$ 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" }

파이프라인의 나머지 부분이 유니코드를 정상적으로 처리하고 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" }

Community Wiki

업데이트 다른 답변에서 제안한대로 지금 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 어딘가에 복사하면 됩니다.


Community Wiki

그것이 내가하는 방법입니다.

 curl yourUri | json_pp

코드를 단축하고 작업을 완료합니다.


Community Wiki

시도 pjson . 색상이 있습니다!

에코 '{"json":"obj"} | pjson

pip 설치하십시오.

⚡ pip install pjson

그런 다음 모든 JSON 콘텐츠를 pjson 파이프합니다.


Community Wiki

다음과 같은 간단한 명령을 사용하여 결과를 얻을 수 있습니다.

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

Community Wiki

나는 당신이 설명하는 것을 정확히 수행하기 위해 json을 사용합니다. 그냥 실행:

 echo $COMPACTED_JSON_TEXT | jshon

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


Community Wiki

또는 Ruby 사용:

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

Community Wiki

Jazor를 확인하십시오. Ruby로 작성된 간단한 명령줄 JSON 파서입니다.

 gem install jazor jazor --help

Community Wiki

JSONLint 에는 명령줄에서 사용하거나 Node.js 프로젝트에 포함할 수 있는 GitHub의 오픈 소스 구현이 있습니다.

 npm install jsonlint -g

그리고

 jsonlint -p myfile.json

또는

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

Community Wiki

jq . 파이프하기만 하면 됩니다. .

예시:

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

Community Wiki

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

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

또는

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

둘 다 다음과 같이 출력을 예쁘게 만듭니다(jq가 훨씬 더 다채로워짐).

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

jq의 큰 장점은 json을 구문 분석하고 처리하려는 경우 훨씬 더 많은 작업을 수행할 수 있다는 것입니다.


Community Wiki

피그먼트화하다

Python의 json.tool을 pygmentize와 결합합니다.

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

이 답변에 나열된 pygmentize에 대한 몇 가지 대안이 있습니다.

다음은 라이브 데모입니다.

데모


Community Wiki

Perl을 사용하여 CPAN에서 JSON::PP 를 설치하면 json_pp 명령을 받게 됩니다. B Bycroft 에서 예제 를 훔치면 다음을 얻습니다.

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

json_pp 는 Ubuntu 12.04(최소한) 및 Debian이 /usr/bin/json_pp 사전 설치되어 제공된다는 점을 언급할 가치가 있습니다.


Community Wiki

JSON::XS perl 모듈에 포함된 json_xs 명령줄 유틸리티를 사용하는 것이 좋습니다. JSON::XS는 JSON 직렬화/역직렬화를 위한 Perl 모듈입니다. Debian 또는 Ubuntu 시스템에서 다음과 같이 설치할 수 있습니다.

 sudo apt-get install libjson-xs-perl

CPAN 에서도 분명히 사용할 수 있습니다.

URL에서 얻은 JSON 형식을 지정하는 데 사용하려면 다음과 같이 curl 또는 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

Community Wiki

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

 jj -p # for reading from STDIN

또는

 jj -p -i input.json

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


Community Wiki

bat 는 구문 강조 표시가 있는 cat

예시:

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

-p 는 헤더 없이 출력하고 -l 은 명시적으로 언어를 지정합니다.

JSON에 대한 색상 지정 및 형식 지정이 있으며 이 주석에 언급된 문제 가 없습니다 . 어떻게 셸 스크립트에서 JSON을 예쁘게 인쇄할 수 있습니까?


Community Wiki

  1. brew install jq
  2. command + | jq
  3. (예: curl localhost:5000/blocks | jq )
  4. 즐기다!

여기에 이미지 설명 입력


Community Wiki

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

 sudo apt-get install yajl-tools

그 다음에,

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

Community Wiki

출처 : http:www.stackoverflow.com/questions/352098/how-can-i-pretty-print-json-in-a-shell-script

반응형