[json] 쉘 스크립트에서 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"}'.


답변

당신이 사용할 수있는: 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.stringifyJavaScript에서 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));\
 });\
"


답변

사용 가능한 최고의 “스마트 화이트 스페이스”포맷터 중 하나가 포함 된 도구를 작성했습니다. 여기에서 다른 대부분의 옵션보다 더 읽기 쉽고 상세한 출력을 생성합니다.

밑줄 cli

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

약간 편견이있을 수 있지만 명령 줄에서 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