쉘 스크립트에서 JSON을 예쁘게 인쇄하려면 어떻게해야합니까?


3061

사람이 읽을 수있는 형식으로 JSON 형식을 지정하는 (Unix) 셸 스크립트가 있습니까?

기본적으로 다음을 변환하고 싶습니다.

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

...이 같은 것으로 :

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


7
: 다시 동안 나는 내 자신의의 짧은 압연 github.com/exhuma/braindump/tree/master/jsonformat 코드는 파이썬의 자신의 사용, 매우 간단 json라이브러리를,하지만 난 잘 GET 구문 강조에 관한 pygments을 추가했습니다.
exhuma

이것에 넘어졌지만 Json Pretty 를 찾았 습니다. Typekit은 API 예제에서 사용하므로 뒤에 klout이 있습니다 ^^
Nick Tomlin

붙여 넣기 복사가 마음에 들지 않으면 jsonprettyprint.net 과 같은 간단한 도구를 사용 하여 원시 JSON을 신속하게 예쁘게 인쇄 할 수 있습니다.
Javaaaa

7
경고 : 파이썬 -m json.tool은 항상 유효 JSON을 생성하지 않습니다. (힌트 : 1e1000)
피크

답변:


4460

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


72
pygmentize -l javascript명령 줄에서 구문 색 출력을 얻기 위해 파이프로 연결할 수 있습니다. 편집 : 피그먼트가 설치된 경우입니다.
Shrikant Sharat

177
그것은이와 함께 좋은 대답은, 단지 내가 가진주의 않습니다 당신이를 알고있을 필요가 있습니다 - 종류의 출력의 키를.
크리스 내쉬

14
myy .vimrc에서 "nnoremap <f5> : %! python -m json.tool <CR> : w <CR>"
imwilsonxu

40
이것은 유니 코드 문자를 \ uXXXX로 이스케이프 처리하는 것 같습니다. 이는 불리 할 수 ​​있습니다.
user1071136

13
별칭을 만들었 alias pretty='python -mjson.tool | pygmentize -l json으므로 다음을 실행할 수 있습니다 command params | pretty.. 도움이 되었기를 바랍니다. 추신 : 누구든지 이것을 확장 할 수 있다면 a) 매번보고있는 컬 출력을 제거하거나 b) json 키를 정렬하지 마십시오. 알려주세요, 나는 매우 감사합니다.
클린트 이스트우드

1023

당신이 사용할 수있는: 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 필터입니다.


11
--sort-keys경우에 따라 도움이되는 옵션 도 있습니다 .
Matthew Flaschen

9
컬 작업 :curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.'
호버 루안

19
"jq." jq (jq 버전 1.5 이하)는 숫자 값을 IEEE 754 64 비트 값으로 구문 분석하기 때문에 매우 크고 작은 숫자의 값을 변경합니다. 자주 사용하는 프리티 프린터에 동일한 문제가 있는지 확인하려면 1e1000 값을 사용하십시오. 참고 파이썬 -mjson.tool가 그것도 JSON없는 무한대를 생산하고 심하게이 테스트를 실패합니다.
피크

1
참고로 형식화 된 결과를 파일로 리디렉션 할 수 있습니다 echo '{ "foo": "lorem", "bar": "ipsum" }' | jq . > myfile.
Chad

26
@Meekohi 대안은 "에코의 불필요한 사용"입니다. <<<내가 찾던 바로 그 운영자를 발견하게되어 매우 기쁩니다 .
jchook

381

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));\
 });\
"

10
Node.js에서 객체를 디버깅하려면 JSON.stringify () 대신 sys.inspect ()를 사용해야합니다. 이유는 다음과 같습니다. markhansen.co.nz/inspecting-with-json-stringify
Gurpartap Singh

11
공감. OP는 "* nix 명령 줄 스크립트"에 관한 것이며이 답변은 다른 맥락입니다.
danorton

49
@danorton : JS는 node.js 및 기타 유사한 솔루션을 통해 명령 줄에서 사용할 수 있습니다.
calvinf

10
콘솔 필요 없음 : node -p "JSON.stringify(JSON.parse(process.argv[1]), null, '\t');"결과를 STDOUT으로 출력합니다.
Julian D.

2
스크립트가 파일 이름 대 stdin
Lukasz Wiktor

340

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

밑줄 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

이 도구는 현재의 열정적 인 프로젝트이므로 기능 요청이있는 경우이 문제를 해결할 가능성이 큽니다.


4
또한 ~ / .bash_profile을 다음 줄로 업데이트했습니다. alias underscor = 'underscore print --outfmt pretty'이제 curl example.com/result.json | 밑줄을 사용하고 다른 서식에는 여전히 밑줄을 사용합니다
Gal Bracha

고마워 데이브! 도구가 좋다! 별명 pretty-json = "예쁜 하녀"와 컬 출력 눈을 즐겁게
맥심 Ponomarev 보낸

훌륭한 서식 지정 도구, 단 하나의 참고 사항 : 출력을 파일로 전달 ( -o 옵션 또는 > 사용 )은 밑줄 인쇄 에서만 작동합니다 . 밑줄 예쁜 색상의 서식 흔적이 삽입되어있는 파일을 저장, 떨어지게 같은 : [32m, [33m, [39mJSON이 유효하지 만드는, 그들 각각 전에 일부 비 인쇄와 함께. 그러나 밑줄 인쇄 만으로는 파일에 아무 것도 추가되지 않으며 서식 작업이 완벽하게 수행됩니다.
티 우린

나는 사랑 jq하지만 이것은 큰 따옴표가없는 내 "JSON"에 효과적이었습니다.
Bluu

@DaveDopson 훌륭한 도구에 감사드립니다 !! jsonselect.org/#tryit ... 와 함께 사용해보십시오 .
mycargus

173

나는 보통 그냥 :

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

json이 http api에서 직접 온 다면
Florian

당신이 노드가 설치되어있는 (그리고 YAML 스타일의 출력을 상관하지 않는) 경우,이 패키지에있다 : rafeca.com/prettyjson는 당신이 컬을 종료 할 수 있도록 | prettyjson
Iolo

3
위에서 언급했듯이 python -mjson.tool 을 JSON 프리티 프린터로 사용할 때 발생하는 문제 중 하나는 항상 JSON을 방출하지는 않는다는 것입니다. 예를 들어 1e1000은 python 2.x 또는 3.x를 사용하든 무한대가됩니다. 'jq.' 항상 JSON을 생성하지만 매우 큰 값 (또는 매우 작은 값)이 정확하게 보존되는 것은 아닙니다.
피크

88

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

3
값이 사전에로드되면 순서가 손실됩니다. 일반 dict객체에는 정의 된 순서가 없습니다. 시도 json.dumps(json.loads('{"b": 1, "a": 2}'), sort_keys=False)하면 어쨌든 교환 된 것을 알 수 있습니다. 수정하려면 가져 오기 OrderedDictload전달하십시오 object_pairs_hook=OrderedDict.
icktoofay

다음을 사용하여 표준 입력에서 읽도록 스크립트를 변경할 수 있습니다 inputFile = sys.stdin. 이 같은 스크립트 당신에게 파이프 물건을 할 수 있습니다 :curl http://somewhere.com/foo.json | pp_json.py
게이브 존슨에게

1
@icktoofay의 주석으로 정렬하지 않으려면 다음과 같이 OrderedDict를 가져옵니다 from collections import OrderedDict.
휴고

2
감사합니다 @icktoofay. 이를 통해 다음과 같은 vim 함수를 만들 수있었습니다 com! FormatJSON %!python -c "from collections import OrderedDict; import sys; import json; j = json.load(sys.stdin, object_pairs_hook=OrderedDict); json.dump(j, sys.stdout, sort_keys=False, indent=4, separators=(',', ': '))" . 구분 기호는 후행 공백이 추가되지 않도록 ( ',', ':')로 설정해야합니다. bugs.python.org/issue16333
blindsnowmobile

좋은 발췌 문장! 나는 이것을 사용 sort_keys = True하여 json 파일을 비교하고 매력처럼 작동하기 때문에 사용했습니다.
JL Peyret

81

npm 및 Node.js를 사용하는 경우 npm install -g json명령을 수행 하고 파이프를 통해 파이프 할 수 있습니다 json. 수행 json -h모든 옵션을 얻을 수 있습니다. 또한 특정 필드를 꺼내고로 출력을 채색 할 수 있습니다 -i.

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

79

jq 도구를 사용하는 기본 방식으로 너무 간단하지 않습니다 .

예를 들면 다음과 같습니다.

cat xxx | jq .

7
경고 : jq는 IEEE 754 64 비트 부동 소수점으로 숫자를 인코딩하므로 표현이 변경 될 수 있습니다. 매우 작고 많은 수의 정밀도가 손실 될 수 있습니다. 자주 사용하는 프리티 프린터에 동일한 문제가 있는지 확인하려면 1e1000 값을 사용하십시오.
피크

5
또는 간단히 : jq . file.json; 그러나 cat file.json | jq(필터없이 .)도 작동합니다. (우분투 / 리눅스, 플랫폼 간 ymmv)
michael

73

Perl과 함께 CPAN 모듈을 사용하십시오 JSON::XS. 명령 행 도구를 설치합니다 json_xs.

확인:

json_xs -t null < myfile.json

JSON 파일 src.jsonpretty.json다음과 같이 확인하십시오.

< src.json json_xs > pretty.json

이없는 json_xs경우을 시도하십시오 json_pp. "pp"는 "pure perl"을위한 것입니다.이 도구는 외부 C 라이브러리 (XS가 Perl의 "확장 시스템"을 의미)에 바인딩하지 않고 Perl에서만 구현됩니다.


9
Cygwin에서 표준으로 제공되는 것 같습니다!
야누스 트롤 슨

12
json_pp는 같은 방식으로 사용될 수 있으며 시스템에 쉽게 설치 될 수 있습니다 (데비안에서는 'perl'패키지에 있습니다).
MichielB

8
참고로, Mac OS X 10.9 시스템에서는 json_pp를 자동으로 사용할 수 있습니다.
Gregg Williams

-t null나에게 null을 주었습니다 : 유효한 형식이 아닙니다 ...하지만 그것을 떠나는 것은 훌륭하게 작동했습니다. 감사.
Lucas

pp는 순수한 펄을위한 것이며, 여기서는 꽤 인쇄되지 않습니다 :) json_xs와 json_pp는 단순한 인쇄보다 더 많은 것을 할 수 있고 -json_opt를 사용하면 예쁜 인쇄 대신 다른 일을합니다. 예쁜 인쇄가 기본 동작이지만.
Kjetil S.

70

* 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에 파일 ( AnC 의 답변 뒤에 내 이름을 "prettyJSON"이라고 함)에 넣으면 chmod +x좋습니다.


실제로 stdin / stdout을 사용하는 것이 훨씬 유연하고 간단합니다. 지적 해 주셔서 감사합니다.
AnC

3
명명 된 파일이 필요한 프로그램의 경우 / dev / stdin, ditto for out 및 err을 사용하십시오.
dvogel

4
fileinput.input()명령 행에 파일이없는 경우 FYI 는 stdin에서 읽습니다.
jfs

fileinput.input ()은 마지막에 마지막으로 확인했을 때 줄 바꿈이없는 파일을 잘 처리 할 수 ​​없습니다.
Zachary Vance

그는 파이썬 다른 언어가 아닌 쉘 스크립트를 요구합니다. JQ로 완벽하게 할 수 있습니다.
Bui Anh Tuan

65

JSON Ruby Gem은 JSON을 확인하기 위해 쉘 스크립트와 함께 번들로 제공됩니다.

sudo gem install json
echo '{ "foo": "bar" }' | prettify_json.rb

스크립트 다운로드 : gist.github.com/3738968


6
이 솔루션은 파이썬과 달리 유니 코드 "\ uxxxx"이스케이프 시퀀스를 디코딩합니다 json.tool. 그러나 중첩 깊이 제한 ( nesting of 20 is too deep (JSON::NestingError)) 이있는 것 같습니다 .
a3nm

2
Ubuntu에서 다음을 수행 할 수 있습니다. sudo apt-get install ruby-json-pure대신gem install
Janus Troelsen

1
```eric-mbp : ~ ericstob $ sudo gem install json 비밀번호 : 가져 오기 : json-1.7.3.gem (100 %) 기본 확장 기능 구축. json-1.7.3 1 gem 설치 json-1.7.3 용 ri 문서 설치 ... json-1.7.3 용 RDoc 문서 설치 ... eric-mbp : ~ ericstob $ prettify_json .rb -bash : prettify_json.rb : 명령을 찾을 수 없음
Eric Hartford

어쩌면 당신은 당신의 내용을 게시 할 수 prettify_json.rb있습니까?
앤드류

스크립트를 다운로드하여 ~/bin폴더 로 옮긴 다음 (PATH에 있는지 확인)으로 이름 prettify_json.rb을 바꾸고 ppj실행하십시오 chmod +x ppj. 이제 다음과 같은 작업을 수행 할 수 있습니다curl www.jsonsring.com/something.json | ppj
Uri

58

업데이트jq 다른 답변에서 제안한대로 지금 사용하고 있습니다. JSON 필터링에는 매우 강력하지만 가장 기본적으로 JSON을보기 좋게 인쇄하는 멋진 방법이기도합니다.

jsonpp 는 매우 멋진 명령 행 JSON 프리티 프린터입니다.

읽어보기에서 :

다음과 같이 웹 서비스 응답을 인쇄하십시오.

curl -s -L http://<!---->t.co/tYTq5Pu | jsonpp

디스크에서 실행되는 파일을 아름답게 만드십시오.

jsonpp data/long_malformed.json

Mac OS X를 사용하는 경우 할 수 있습니다 brew install jsonpp. 그렇지 않은 경우 바이너리를에있는 어딘가에 복사하면 $PATH됩니다.


1
나는 거대한 파일 (> 60MB)에 대해 jsonpp (과거의 성공적인 사용)를 시도했습니다. 5 분 후에 멈췄습니다. 나는 python -mjson.tool(여기에서 다른 답변 으로) 파이프로 연결 했으며 10-20 초가 걸렸습니다 ...
volker

60MB의 JSON? 와! 나는 일반적으로 알지만 유용한 파일을 다루지 않습니다. 감사.
jordelver

내 우분투 상자에서 나는이 json_pp-으로부터 이름의 유사성에도 불구하고, 나는 이것이 완전히 다른 프로젝트 인 생각하지만, 잘 형식 JSON을 수행하는 jsonpp여기에 언급
davidpricedev

56

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

curl yourUri | json_pp

코드가 단축되고 작업이 완료됩니다.


3
Ubuntu 서버 : 설치가 매우 제한된 프로덕션 시스템이있는 경우 기본적으로 특정 이름으로 설치되므로 이것이 최선의 선택 일 수 있습니다. 파이썬은 종종 버전에 따라 다른 방식으로 설치됩니다 (예 : python3, python 또는 전혀 아님).
jonathanjo

55

예쁜 JSON 인쇄를위한 간단한 bash 스크립트

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

예:

cat file.json | json_pretty.sh

1
피드백을 주셔서 감사합니다. 나는 오늘 개인적으로 사용하기 위해이 스크립트를 작성했으며 내 경우에는 잘 작동했습니다. 수정했습니다.이 문제는 더 작고 작습니다. 완전한 형식을 지원하는 목표는 없지만 필요한 경우 다른 수정을 할 수 있습니다.
Evgeny Karpov

2
그것은 내가 찾은 일하는 대답 일뿐입니다. 나는 리눅스를 가지고 있습니다-루비가없고, 자바 스크립트가 없으며, 파이썬 모듈을 다운로드하기 위해 인터넷에 액세스 할 수 없습니다 ... %*c표기법을 지원하지 않는 약간 다른 awk가 있으므로를 변경 printf했습니다 c=0; while (c++<offset) printf " "; printf $0;. 그리고 내 awk는 다른 정규식 탈출을 가지고 있으며 백 슬래시는 작동하지 않습니다 []. 정규식을 /^[[{]/과로 변경했습니다 /[]}]/.
Zaboj Campula

2
완전한 기본이며 타사 소프트웨어가 필요하지
않으므로이 방법을 사용해야

1
@EvgenyKarpov 좋은 캐치, 전체 롤백이 필요하지 않습니다, 그냥 grep실수로 지워졌습니다.)
Blag

1
고마워 친구, 나는 8MB의 한 줄짜리 JSON을 간단한 bash로 포맷하는 빠른 방법을 원했습니다.
Ahmed M

53

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

echo '{ "json": "obj"} |  피손

다음과 pip같이 설치하십시오 .

⚡ pip install pjson

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


그것은 python-pip (sudo apt-get install python-pip)를 요구 한 다음 (sudo pip install pjson)을 요구합니다. 큰 장점은 색상입니다!
Kristjan Adojaan

1
단점은 컬러 출력을 잡을 수 없다는 것입니다.
Kristjan Adojaan

51
$ 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"
}

파이프 라인의 나머지 부분이 유니 코드를 정상적으로 처리하고 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"
}

실제로 나는 동일한 기능을 수행하지만, 자바 스크립트 자체 :)으로
로버트 굴드

2
내가 가지고있는 JSON 모듈 버전에서는 to_json옵션을 허용하지 않는 것 같습니다. 그러나 이것은 작동합니다.perl -MJSON -nE 'say JSON->new->pretty->encode(from_json $_)' text.json
Rörd

파이썬 예제는 단순화 될 수 있습니다. JSON 출력을로 바로 파이프하는 것이 훨씬 쉽습니다 python -m json.tool.
Dan Loewenherz

@ 단 : 예. json.tool코드 예제 를 보여주는 몇 가지 답변이 있습니다. 1.이 버전을 사용하면 일부 매개 변수를 변경할 수 있습니다. 예를 들어, indent게시 당시 (2008) Python 2.4는 여전히 지원되지 않는-mjson.tool
jfs

40

나는 당신이 묘사하고있는 것을 정확하게하기 위해 jshon 을 사용 합니다. 그냥 실행 :

echo $COMPACTED_JSON_TEXT | jshon

JSON 데이터를 변환하기 위해 인수를 전달할 수도 있습니다.


감사합니다. jshon은 같은 작업에 파이썬이나 루비를 사용하는 것보다 훨씬 빠릅니다.
Alexander

2
@Alexander-예쁜 프린터가 얼마나 빠릅니까? 저는 파이썬이 사전 설치된 OSx Lion에 있습니다. python -mjson.tool을 사용하면 0.1 초에 96KB json 파일을 인쇄 할 수 있습니다-jshon이 연결하는 earthporn의 json 출력은 약 24KB이며 0.08 초에 인쇄 할 수 있습니다. jshon이 얼마나 더 빠릅니까?
joensson 2016 년

1
나는 1 + GB 압축 (누르지 않은 압축되지 않은) JSON 데이터 파일로 작업하고 있으므로 jshon이 더 빠르다는 제안에 대단히 감사합니다.
Ryan Ballantyne

38

또는 루비와 함께 :

echo '{ "foo": "lorem", "bar": "ipsum" }' | ruby -r json -e 'jj JSON.parse gets'

그것은 나에게 오류를 준다. 루비 json 패키지가 설치되어 있어야합니까?
mjs

3
예, JSON Ruby Gem이 필요합니다 : sudo gem install json
darscan

@MatSchaffer JSON을 사용하여 사용자 정의 to_json메소드로 오브젝트를 직렬화하는 경우에는 작동하지 않습니다 . Kernel#jj같은 (또는 숫자 / 문자열 / 부울)의 배열과 해시를 pretty-prints합니다.
Phrogz 2016 년

Windows에서 다음을 시도하십시오. echo { "foo": "lorem", "bar": "ipsum" } | ruby -r json -e 'jj JSON.parse gets'
Ross Attrill

36

Jazor를 확인하십시오 . Ruby로 작성된 간단한 명령 행 JSON 파서입니다.

gem install jazor
jazor --help

4
나만 아니면 이것이 OP의 질문에 실제로 대답하는 유일한 제안입니까? 나는 출력을 파이프 할 수있는 간단한 명령을 찾고 여기에 왔으며 curl이것이 나를 위해 한 유일한 명령 입니다.
레오 Cassarani

2
출력에 색상을 지정할 수있는 옵션이 마음에 듭니다. 더 쉽게 읽을 수 있습니다.
앤드류

ooh 또한 REST API의 출력을보기 위해 이것을 사용하고 있기 때문에 URL을 전달하는 옵션이 좋습니다
Andrew

35

이 간단한 명령을 사용하여 결과를 얻을 수 있습니다.

echo "{ \"foo\": \"lorem\", \"bar\": \"ipsum\" }"|python -m json.tool

내 의견으로는 가장 좋은 답변입니다. 작고 기억하기 쉬우 며 비표준 도구를 설치할 필요가 없습니다.
Eugene C

python -m json.tool이 JSON 객체의 순서를 유지하지 않는 것 같습니다.
pushNpop

31

JSONLintGitHub에 오픈 소스 구현을 가지고 있으며 명령 줄에서 사용하거나 Node.js 프로젝트에 포함 할 수 있습니다.

npm install jsonlint -g

그리고

jsonlint -p myfile.json

또는

curl -s "http://api.twitter.com/1/users/show/user.json" | jsonlint | less

28

출력을로 파이프하십시오 jq ..

예:

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

@Ackshaey Singh의 훌륭한 답변과 파일로 쉽게 리디렉션 할 수 있습니다. 예cat <file_name.txt> | jq . > <output_name.txt>
Pramit

9
brew install jq당신이 맥 OS에 있다면.
Distwo

1
불행히도, jq .예쁘게 인쇄 하는 데에는 한 가지 잠재적 인 단점이 있습니다. 모든 현존하는 jq 버전은 JSON 숫자를 IEEE 숫자로 취급해야하므로 매우 큰 정수와 같이 정밀도가 쉽게 손실됩니다.
피크

2
@Pramit cat file |은 프로세스의 낭비입니다. 그냥 jq . <file_name.txt >output_name.txt리터럴 <>문자로 수행하십시오.
마크 리드

24

피그먼트

파이썬의 json.tool을 pygmentize와 결합합니다.

echo '{"foo": "bar"}' | python -m json.tool | pygmentize -g

내 답변에 나열된 pygmentize에 대한 대안 있습니다.

라이브 데모는 다음과 같습니다.

데모


5
때로는 pygmentize -l json채색을 위해 사용해야합니다.
JP

APT 패키지와 함께 설치 python-pygments즉,apt-get install python-pygments
1월

23

Perl을 사용하면 CPAN에서 JSON :: PP 를 설치 하면 json_pp 명령이 제공됩니다. B Bycroft 에서 예제 를 도용하면 다음과 같은 이점이 있습니다.

[pdurbin@beamish ~]$ echo '{"foo": "lorem", "bar": "ipsum"}' | json_pp
{
   "bar" : "ipsum",
   "foo" : "lorem"
}

json_pp우분투 12.04 (적어도)와 데비안이 사전 설치되어 있음을 언급 할 가치가 있습니다 ./usr/bin/json_pp


19

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

19

jq 또는 json_pp와 같은 표준 도구를 간단히 사용할 수 있습니다.

echo '{ "foo": "lorem", "bar": "ipsum" }' | json_pp

또는

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

둘 다 다음과 같이 출력을 prettify합니다 (jq 훨씬 더 화려한).

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

jq의 큰 장점은 json을 구문 분석하고 처리하려면 더 많이 할 수 있다는 것입니다.


json_pp는 내 Mac에 있지만 jq는 아닙니다. 감사!
David H

1
@DavidH-이 도움이됩니까 : stackoverflow.com/questions/37668134/…
Schmitzi

감사! 이전에 jq에 대해 들어 본 적이 없습니다.
David H

17

jj 는 초고속이며 엄청난 JSON 문서를 경제적으로 처리 할 수 ​​있으며 유효한 JSON 번호를 엉망으로 만들지 않으며 사용하기 쉽습니다. 예 :

jj -p # for reading from STDIN

또는

jj -p -i input.json

(2018) 여전히 새롭기 때문에 예상대로 잘못된 JSON을 처리하지 않지만 주요 플랫폼에 쉽게 설치할 수 있습니다.




12

아래 명령으로 yajl-tools를 설치하십시오 :

sudo apt-get install yajl-tools

그때,

echo '{"foo": "lorem", "bar": "ipsum"}' | json_reformat


대박. 다른 언어 / 통역이 필요하지 않으며 패키지 저장소에 있으므로 양조 할 필요가 없습니다!
Joseph Lust
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.