(유닉스) 쉘 스크립트로 JSON을 어떻게 출력 할 수 있습니까?


Answers

다음을 사용할 수 있습니다 : jq

사용하기가 매우 쉽고 훌륭하게 작동합니다! 스트림을 포함하여 매우 큰 JSON 구조를 처리 할 수 ​​있습니다. here 에서 자습서를 찾을 수 있습니다.

다음은 그 예입니다.

$ jq . <<< '{ "foo": "lorem", "bar": "ipsum" }'
{
  "bar": "ipsum",
  "foo": "lorem"
}

또는 다른 말로하면 :

$ echo '{ "foo": "lorem", "bar": "ipsum" }' | jq .
{
  "bar": "ipsum",
  "foo": "lorem"
}
Question

사람이 읽을 수있는 형태로 JSON을 포맷팅하기위한 (유닉스) 셸 스크립트가 있습니까?

기본적으로, 나는 다음과 같이 변형시키고 싶다.

{ "foo": "lorem", "bar": "ipsum" }

... 이런 식으로 :

{
    "foo": "lorem",
    "bar": "ipsum"
}



바닐라 배쉬

타사 설치없이 예쁜 JSON 인쇄를위한 간단한 Bash 스크립트 ( grep / awk )

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}'

예 :

1) 콘솔에서 파일 읽기 및 예쁜 인쇄

cat file.json | json_pretty.sh

2) 파일에서 파일 (UTF8 기반)의 창 GIT Bash와 함께 사용 :

cat fileIn.json |sh.exe json_pretty.sh > fileOut.json



나는이 질문이 광고 메아리라고 대답했음을 알고 있지만 Json의 prettify 명령보다 나은 루비 솔루션을 문서화하고 싶습니다. 보석 colorful_json 이 상당히 좋습니다.

gem install colorful_json
echo '{"foo": "lorem", "bar": "ipsum"}' | cjson
{
  "foo": "lorem",
  "bar": "ipsum"
}



yajl 은 제 경험으로 아주 좋습니다. json_reformat 명령을 사용하여 .vimrc 다음 행을 넣어서 vim 에서 .json 파일을 예쁜 것으로 인쇄합니다.

autocmd FileType json setlocal equalprg=json_reformat



출력을 jq . 파이프하기 만하면 jq . .

예:

twurl -H ads-api.twitter.com '.......' | jq .



  1. brew install jq
  2. command + | jq
  3. (예 : curl localhost:5000/blocks | jq )
  4. 즐겨!




pjson 시도 pjson . 색상이 있습니다!

pip 와 함께 설치하십시오.

⚡ pip install pjson

그런 다음 모든 JSON 컨텐츠를 pjson 파이프하십시오.




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))



JSON :: XS perl 모듈에 포함 된 json_xs 명령 줄 유틸리티를 사용하는 것이 좋습니다. JSON :: XS는 데비안 또는 우분투 컴퓨터에서 JSON을 직렬화 / 비 직렬화하는 Perl 모듈로서 다음과 같이 설치할 수 있습니다.

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



Jazor 확인하십시오. Ruby로 작성된 간단한 명령 행 JSON 구문 분석기입니다.

gem install jazor
jazor --help



* 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 및 chmod +x 있는 AnC 의 답변 (내 이름은 "prettyJSON"이라고 함)에 넣으면됩니다.




$ 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))'

멋지게 읽을 수있는 단어가 인코딩됩니다.

{
    "D\u00fcsseldorf": "lorem", 
    "bar": "ipsum"
}

나머지 파이프 라인이 정상적으로 유니 코드를 처리하고 JSON을 사람이 쉽게 use ensure_ascii=False 단순히 ensure_ascii=Falseuse 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"
}



그것이 내가하는 방법입니다.

curl yourUri | json_pp

코드를 줄이고 작업을 완료합니다.




npm과 Node.js를 사용하는 경우 npm install -g json 을 수행 한 다음 json 통해 명령을 파이프 할 수 있습니다. 모든 옵션을 얻으려면 json -h 를 수행하십시오. 또한 특정 필드를 꺼내고 -i 하여 출력을 색칠 할 수 있습니다.

curl -s http://search.twitter.com/search.json?q=node.js | json



내가 사용할 수있는 최고의 "스마트 공백"포맷터 중 하나를 가진 도구를 썼습니다. 여기서 다른 옵션의 대부분보다 더 읽기 쉽고 덜 자세한 출력을 생성합니다.

underscore-cli

이것은 "스마트 공백"이 어떻게 생겼는지입니다.

조금 편견이있을 수 있지만 명령 줄에서 JSON 데이터를 인쇄하고 조작하는 데 유용한 도구입니다. 사용하기 매우 편리하며 광범위한 명령 줄 도움말 / 문서가 있습니다. 놀랍게도 다른 방법으로는 성가신 1001 개의 작은 작업에 사용하는 스위스 군용 칼입니다.

최신 유즈 케이스 : Chrome, 개발자 콘솔, 네트워크 탭, 모두 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

이 도구는 현재 나의 열정적 인 프로젝트이므로, 기능 요청이있을 경우이를 해결할 수있는 좋은 기회가됩니다.