쉘 스크립트에서 JSON을 예쁘게 인쇄 할 수 있습니까?
질문
인간이 읽을 수있는 형식으로 JSON을 포맷 할 (UNIX) 쉘 스크립트가 있습니까?
기본적으로 다음을 변환하기를 원합니다.
{ "foo": "lorem", "bar": "ipsum" }
... 이와 같은 것으로 :
{
"foo": "lorem",
"bar": "ipsum"
}
답변
파이썬 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"}'처럼 invoke.
@pnd는 아래의 주석에서 파이썬 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"
답변
JSON.Stringify의 "Space"인수를 JavaScript에서 예쁜 인쇄 JSON으로 사용합니다.
예 :
// Indent with 4 spaces
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, 4);
// Indent with tabs
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, '\t');
명령 줄에서 JSON을 지정하는 node.js와의 UNIX 명령 행에서 다음을 수행하십시오.
$ node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, '\t'));" \
'{"foo":"lorem","bar":"ipsum"}'
보고:
{
"foo": "lorem",
"bar": "ipsum"
}
unix 명령 줄에서 node.js에서 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));\
});\
"
답변
나는 최상의 "Smart WhiteSpace"포맷터 중 하나가있는 도구를 썼습니다.다른 옵션의 대부분보다 더 읽기 쉽고 덜 자세한 출력을 생성합니다.
Underscore-CLI.
이것은 "Smart WhiteSpace"가 어떻게 생겼는지입니다.

조금 편향 될 수 있지만 명령 줄에서 JSON 데이터를 인쇄하고 조작하는 것은 멋진 도구입니다.그것은 사용하기에 슈퍼 친화적이며 광범위한 명령 줄 도움말 / 설명서를 가지고 있습니다.그것은 다른 방법으로 놀랍게도 성가신 1001 개의 다른 작은 작업에 사용하는 스위스 군대 칼입니다.
최신 유스 케이스 : Chrome, Dev 콘솔, 네트워크 탭, 모든 HAR 파일로 내보내기, "Cat Site.har | 밑줄 | 밑줄을 선택하십시오."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
데이터 선택 (이 경우 "테스트"값)을 검색하려면 다음을 수행합니다.
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
답변
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))
출처:https://stackoverflow.com/questions/352098/how-can-i-pretty-print-json-in-a-shell-script
최근댓글