Display curl output in readable JSON format in Unix shell script

In my Unix shell script, when I execute a curl command, the result will be displayed as below which I am redirecting to file:

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

But, I want this output to put in the readable JSON format like below in the file:

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

How do I format the output this way?

11 Answers

A few solutions to choose from:

json_pp: command utility available in Linux systems for JSON decoding/encoding

echo '{"type":"Bar","id":"1","title":"Foo"}' | json_pp -json_opt pretty,canonical { "id" : "1", "title" : "Foo", "type" : "Bar" } 

You may want to keep the -json_opt pretty,canonical argument for predictable ordering.


: lightweight and flexible command-line JSON processor. It is written in portable C, and it has zero runtime dependencies.

echo '{"type":"Bar","id":"1","title":"Foo"}' | jq '.' { "type": "Bar", "id": "1", "title": "Foo" } 

The simplest jq program is the expression ., which takes the input and produces it unchanged as output.

For additinal jq options check the manual


with :

echo '{"type":"Bar","id":"1","title":"Foo"}' | python -m json.tool { "id": "1", "title": "Foo", "type": "Bar" } 

with and :

echo '{"type":"Bar","id":"1","title":"Foo"}' | node -e "console.log( JSON.stringify( JSON.parse(require('fs').readFileSync(0) ), 0, 1 ))" { "type": "Bar", "id": "1", "title": "Foo" } 
10

I am guessing that you want to prettify the JSON output. That could be achieved using python:

curl | python -mjson.tool > out.json 
6

This is to add to of Gilles' Answer. There are many ways to get this done but personally I prefer something lightweight, easy to remember and universally available (e.g. come with standard LTS installations of your preferred Linux flavor or easy to install) on common *nix systems.

Here are the options in their preferred order:

Python Json.tool module

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

pros: almost available everywhere; cons: no color coding


jq (may require one time installation)

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

cons: needs to install jq; pros: color coding and versatile


json_pp (available in Ubuntu 16.04 LTS)

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

For Ruby users

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

You can use the json node module:

npm i -g json

then simply append | json after curl. curl | json

3
python -m json.tool Curl | python -m json.tool 

can also help.

You can install jq and make the query like below:

curl | jq 

enter image description here

4

I found json_reformat to be very handy. So I just did the following:

curl | json_reformat 

that's it!

1

Motivation: You want to print prettify JSON response after curl command request.

Solution: json_pp - commandline tool that converts between some input and output formats (one of them is JSON). This program was copied from json_xs and modified. The default input format is json and the default output format is json with pretty option.

Synposis: json_pp [-v] [-f from_format] [-t to_format] [-json_opt options_to_json1[,options_to_json2[,...]]]

Formula: <someCommand> | json_pp

Example:

Request

curl -X | json_pp 

Response

{ "completed" : false, "id" : 1, "title" : "delectus aut autem", "userId" : 1 } 

Check out curljson

$ pip install curljson $ curljson -i <the-json-api-url> 

With :

curl <...> | xidel - -se '$json' 

xidel can probably retrieve the JSON for you as well.

A lot more features (slice, filter and map and transform structured ) apart from formatting.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like