Unix 쉘 스크립트에서 읽을 수있는 JSON 형식으로 curl 출력 표시


215

내 유닉스 쉘 스크립트에서 curl 명령을 실행하면 결과가 아래와 같이 표시되어 파일로 리디렉션됩니다.

{"type":"Show","id":"123","title":"name","description":"Funny","channelTitle":"ifood.tv","lastUpdateTimestamp":"2014-04-20T20:34:59","numOfVideos":"15"}

그러나이 출력을 파일에서 아래처럼 읽을 수있는 JSON 형식으로 넣기를 원합니다.

{"type":"Show",
"id":"123",
"title":"name",
"description":"Funny",
"channelTitle":"ifood.tv",
"lastUpdateTimestamp":"2014-04-20T20:34:59",
"numOfVideos":"15"}

이 방법으로 출력을 어떻게 형식화합니까?

답변:


533

이것을 시도하십시오 :

curl ... | json_pp 

또는 아이덴티티 필터 사용 :

curl ... | jq '.'

여기에 이미지 설명을 입력하십시오

또는 :

curl ... | node <<< "var o = $(cat); console.log(JSON.stringify(o, null, 4));"

https://stedolan.github.io/jq/를 확인 하십시오


1
파일로 리디렉션하지 않고 먼저 시도하십시오. json_pp 또는 jq가 설치되어 있는지 테스트 했습니까? 그것은 펄과 함께 제공
Gilles Quenot 23시 08 분

1
json_pp데이터를 예상 한 것보다 역순으로 포맷하는 것 같습니다. 데이터를 되돌릴 수있는 방법이 있습니까?
Antonio

1
json_pp는 일부 입력 형식과 출력 형식 (JSON) 중 하나를 변환하는 Perl 명령 유틸리티입니다. 기본 입력 형식은 json이고 기본 출력 형식은 pretty 옵션이있는 json입니다.
Fabijan Bajo

3
json_pp 솔루션에 대한 파이프는 매우 우아합니다. 감사합니다
앤디

1
노드로 파이프는 매우 우아합니다. 감사!
Matthew Zackschewski

53

JSON 출력을 미리 확인하고 싶다고 생각합니다. 파이썬을 사용하여 얻을 수 있습니다.

curl http://localhost:8880/test.json | python -mjson.tool > out.json


대답 해줘서 고마워. 그러나 저는 쉘을 사용하여 파이썬을 사용하지 않습니다. 쉘을 안내해 줄 수
Jams

@Jams는 쉘에서 파이썬을 실행하여 꽤 인쇄 된 결과를 제공합니다.
agconti

파이썬이 사전 설치되어 있으므로 훌륭한 솔루션입니다.
Gayan Weerakutti

1
"| head"를 추가하면 해당 Python 스크립트에 "broken pipe"오류가 발생합니다.
웅크 리고 새끼 고양이

@CrouchingKitten 나는 그 문제를 직접 보지 못했지만 (아마도 다른 버전 일 수도 있음), head끝에 도달하기 전에 파이프로 출력되는 것을 차단하여 파이프를 "파손"하는 명령 때문일 수 있습니다 . head파이프에서 전체 데이터 스트림을 사용할 수 있으면 오류가 표시되지 않을 것으로 예상됩니다.
code_dredd

19
python -m json.tool
Curl http://127.0.0.1:5000/people/api.json | python -m json.tool

도움이 될 수도 있습니다.


11

이 노드 모듈을 사용할 수 있습니다

[sudo] npm i -g json; // 루트 권한을 사용하여 노드 모듈을 설치하지 않는 것이 좋습니다.

그런 다음 |json컬 후 간단히 추가하십시오 . curl http://localhost:8880/test.json |json


11

이것은 Gilles 'Answer에 추가하는 것입니다. 이 작업을 수행하는 방법에는 여러 가지가 있지만 개인적으로 나는 일반적인 * nix 시스템에서 가볍고 기억하기 쉽고 보편적으로 사용할 수있는 것을 선호합니다 (예 : 선호하는 Linux 버전의 표준 LTS 설치 또는 설치가 용이함).

다음은 원하는 순서대로 옵션입니다.

파이썬 Json.tool 모듈

echo '{"foo": "lorem", "bar": "ipsum"}' | python -mjson.tool

찬성 : 거의 모든 곳에서 이용 가능; 단점 : 색상 코딩 없음


jq (일회 설치가 필요할 수 있음)

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

단점 : jq를 설치해야합니다. 장점 : 컬러 코딩 및 다목적


json_pp (우분투 16.04 LTS에서 사용 가능)

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

루비 사용자

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

감사합니다 @zhenhua! 내가 사용 cat myFile.json | python -mjson.tool >> myFilePretty.json후 나의 편집기에서 열립니다 (정력, 미워하지 않아요)와 색상을 얻었다.
essa

8

json_reformat이 매우 편리하다는 것을 알았습니다. 그래서 방금 다음을 수행했습니다.

curl http://127.0.0.1:5000/people/api.json | json_reformat

그게 다야!


Ubuntu를 사용하는 경우 yajl-tools 패키지에서 json_reformat을 찾을 수 있습니다.
Kevin


1

자극: curl 명령 요청 후 prettify JSON 응답을 인쇄하려고합니다.

해결책 : json_pp- 일부 입력 형식과 출력 형식을 변환하는 명령 줄 도구 (하나는 JSON)입니다. 이 프로그램은 json_xs에서 복사되어 수정되었습니다. 기본 입력 형식은 json이고 기본 출력 형식은 pretty 옵션이있는 json입니다.

시냅스 : json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,...]]]

공식 :<someCommand> | json_pp

:

의뢰

curl -X https://jsonplaceholder.typicode.com/todos/1 | json_pp 

응답

{
   "completed" : false,
   "id" : 1,
   "title" : "delectus aut autem",
   "userId" : 1
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.