사람이 읽을 수있는 형식으로 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"}'
.
답변
당신이 사용할 수있는: 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 필터입니다.
답변
JSON.stringify
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');
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, 개발자 콘솔, 네트워크 탭, 모두 HAR 파일로 내보내기, “cat site.har | 밑줄 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