Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

tools to work with json and curl from the console

I'm giving my first steps with ElasticSearch and to test things I'm currently working with curl from the command line. However it's kind of annoying because I have to type everything on a text editor and paste in the console (no tab formatting in the console), and the json output you get is not formatted.

So I was wondering if there's some equivalente of the many sql consoles for working with json data, to make it easier to test and play around with json rest web services.

What tools do you use for this kind of tasks?

like image 519
opensas Avatar asked Apr 29 '12 15:04

opensas


People also ask

How do I get JSON with curl?

To get JSON with Curl, you need to make an HTTP GET request and provide the Accept: application/json request header. The application/json request header is passed to the server with the curl -H command-line option and tells the server that the client is expecting JSON in response.

Can JSON parse curl?

curl will not touch or parse the data that it sends, so you need to make sure it is valid JSON yourself. You can use multiple --json options on the same command line. This makes curl concatenate the contents from the options and send all data in one go to the server.

What is curl in JSON?

The curl “cockpit” is yet again extended with a new command line option: --json . The 245th command line option. curl is a generic transfer tool for sending and receiving data across networks and it is completely agnostic as to what it transfers or even why.


1 Answers

First of all, if the json output you get isn't formatted, append ?pretty=1 to any url. The result will be much nicer. Another option is to pipe the output to python -m json.tool if you have Python 2.6+. I like the latter option because I have it saved to a shell function and can simply type | j after any command that outputs json. Much shorter and generic.

For issuing curl commands there are a couple of options. The most universal solution is to create a shell script with the whole command. For example:

curl -s localhost:9200/foo/_search -d'
  {"query":
     {"query_string":
        {"query":"foo*"}}}' | python -m json.tool

Rather than pasting that at a shell prompt, save it in a file. Then just tweak the source and run it as often as you need.

% sh query

A variation on this is to use Emacs. I use it to run curl on regions of buffers, manipulate the result, etc. shell-command-on-region or M-| is a good choice there. So for the above script, I can issue M-| sh RET instead of switching to a shell. Vim allows you to do something similar.

I haven't checked this one out, but a lot of people seem to like elasticsearch-head. It's a UI that will issue queries and give you structured results. http://mobz.github.com/elasticsearch-head/

Update: I recently noticed that Perl's JSON module ships with a handy command-line utility called json_pp that function's similarly to Python's json.tool. If you install JSON::XS there's also a (faster) json_xs bin.

like image 186
drewr Avatar answered Sep 19 '22 16:09

drewr