JSON 형식을 사람이 읽을 수 있는 형식으로 지정하는 (Unix) 셸 스크립트가 있습니까?
기본적으로 다음을 변환하고 싶습니다.
{ "foo": "lorem", "bar": "ipsum" }
... 다음과 같이
{ "foo": "lorem", "bar": "ipsum" }
질문자 :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
.
당신은 사용할 수 있습니다 : 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"
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));\ });\ "
저는 최고의 "스마트 공백" 포맷터 중 하나를 사용할 수 있는 도구를 작성했습니다. 여기에서 대부분의 다른 옵션보다 읽기 쉽고 장황한 출력을 생성합니다.
"스마트 공백"은 다음과 같습니다.
약간 편향되어 있을 수 있지만 명령줄에서 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
이 도구는 나의 현재 열정적인 프로젝트이므로 기능 요청이 있는 경우 이를 해결할 수 있는 좋은 기회가 있습니다.
나는 일반적으로 다음을 수행합니다.
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
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))
npm 및 Node.js를 사용하는 경우 npm install -g json
을 수행한 다음 json
통해 명령을 파이프할 수 있습니다. 모든 옵션을 얻으려면 json -h
또한 특정 필드를 추출하고 출력을 -i
채색할 수 있습니다.
curl -s http://search.twitter.com/search.json?q=node.js | json
Perl에서는 CPAN 모듈 JSON::XS
합니다. 명령줄 도구 json_xs
설치합니다.
확인:
json_xs -t null < myfile.json
JSON 파일 src.json
을 pretty.json
.
< src.json json_xs > pretty.json
json_xs
가 없으면 json_pp 를 시도 json_pp
. "pp"는 "순수한 펄"을 위한 것입니다. 이 도구는 외부 C 라이브러리(XS가 Perl의 "확장 시스템"을 나타내는 것)에 대한 바인딩 없이 Perl에서만 구현됩니다.
*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
하면 됩니다.
예쁜 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
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" }
파이프라인의 나머지 부분이 유니코드를 정상적으로 처리하고 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
어딘가에 복사하면 됩니다.
그것이 내가하는 방법입니다.
curl yourUri | json_pp
코드를 단축하고 작업을 완료합니다.
다음과 같은 간단한 명령을 사용하여 결과를 얻을 수 있습니다.
echo "{ \"foo\": \"lorem\", \"bar\": \"ipsum\" }"|python -m json.tool
나는 당신이 설명하는 것을 정확히 수행하기 위해 json을 사용합니다. 그냥 실행:
echo $COMPACTED_JSON_TEXT | jshon
JSON 데이터를 변환하기 위해 인수를 전달할 수도 있습니다.
또는 Ruby 사용:
echo '{ "foo": "lorem", "bar": "ipsum" }' | ruby -r json -e 'jj JSON.parse gets'
Jazor를 확인하십시오. Ruby로 작성된 간단한 명령줄 JSON 파서입니다.
gem install jazor jazor --help
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
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을 구문 분석하고 처리하려는 경우 훨씬 더 많은 작업을 수행할 수 있다는 것입니다.
Python의 json.tool을 pygmentize와 결합합니다.
echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g
이 답변에 나열된 pygmentize에 대한 몇 가지 대안이 있습니다.
다음은 라이브 데모입니다.
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
사전 설치되어 제공된다는 점을 언급할 가치가 있습니다.
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
jj 는 매우 빠르고, 방대한 JSON 문서를 경제적으로 처리할 수 있고, 유효한 JSON 번호를 엉망으로 만들지 않으며, 사용하기 쉽습니다.
jj -p # for reading from STDIN
또는
jj -p -i input.json
(2018) 아직 새롭기 때문에 잘못된 JSON을 예상대로 처리하지 못할 수도 있지만 주요 플랫폼에 쉽게 설치할 수 있습니다.
bat
는 구문 강조 표시가 있는 cat
예시:
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
출처 : http:www.stackoverflow.com/questions/352098/how-can-i-pretty-print-json-in-a-shell-script
Java의 +=, -=, *=, /= 복합 할당 연산자에 캐스팅이 필요하지 않은 이유는 무엇입니까? (0) | 2021.10.06 |
---|---|
필요한 경우 소수점 이하 2자리 이하로 반올림하는 방법은 무엇입니까? (0) | 2021.10.06 |
HashMap을 통해 반복 (0) | 2021.10.06 |
파이썬에서 현재 시간을 얻는 방법 (0) | 2021.10.06 |
특정 Git 브랜치를 복제하려면 어떻게 해야 합니까? [복제하다] (0) | 2021.10.06 |