Beautiful API JSON results in bash

Install the json command line JSON parsing package [docs].

npm install -g json

Once that’s installed, add the following functions to your bash initialization file (i.e. .zshrc or .bashrc you will find them in your home directory)

post () {
    curl -s -X POST -D - --header "Content-Type: application/json" --data $1 $2 | json -i
}

delete () {
  curl -s -X DELETE -D - $1 | json -i
}

put () {
  curl -s -X PUT -D - --header "Content-Type: application/json" --data $1 $2 | json -i
}

get () {
  if [ -z "$2" ]
    then
      curl -s -X GET -D - $1 | json -i
    else
      curl -s -X GET -D - $1 | json -ic $2
  fi
}

Now you’re able to query an API and get the metadata headers, and the JSON. In addition, the JSON will be formatted and human readable.

GET

I have a very simple ASP.NET Web API running on port 5000. First, I'll request all children.

get http://localhost:5000/api/child

POST

Now, I'll create a new child with a name of Miles Johansson.

post '{"name":"Miles Johansson"}' http://localhost:5000/api/child

PUT

Then I'll update his name to Miles Champion.

put '{"childId":21, "name":"Miles Champion", "delivered": false}' http://localhost:5000/api/child/21

DELETE

Then I delete Miles. You'll notice he's gone after I run the delete function.

delete http://localhost:5000/api/child/21

GET filtering

I updated the data set so that two of the children have their delivered key set to true. I'll use the filtering capabilities of the json library to only show those children who had their toys delivered.

get http://localhost:5000/api/child 'this.delivered===true'

Next I'll find all children that have a u in their name.

get http://localhost:5000/api/child 'this.name.match(/u/)!==null'