셸 스크립트로 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));\
});\
"
저는 최고의 "스마트 공백" 포맷을 가진 도구를 썼습니다.여기서의 대부분의 다른 옵션보다 읽기 쉽고 상세 출력은 적습니다.
「스마트 스페이스」는 다음과 같습니다.
제가 좀 편견이 있을 수도 있지만, 명령줄에서 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
으로 명령어를 에 접속합니다.json
json -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::XS
json_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
.
해봐. 색깔이 있어!
와 함께 설치 방법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
JSONLint는 GitHub에 오픈 소스 구현을 가지고 있으며 명령줄에서 사용하거나 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_pp
Ubuntu 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
'programing' 카테고리의 다른 글
Angular CLI에 의해 생성되는 "spec.ts" 파일은 어떤 용도로 사용됩니까? (0) | 2023.03.29 |
---|---|
React + 노드 도입 방법JS Express 애플리케이션을 AWS에 적용하시겠습니까? (0) | 2023.03.19 |
jQuery - ajax POST의 폼 값을 가져옵니다. (0) | 2023.03.19 |
WordPress 페이지의 html 코드를 편집하는 방법 (0) | 2023.03.19 |
Jquery TimeOut 함수를 중지/오버라이드하는 방법 (0) | 2023.03.19 |