What are good CLI tools for JSON? What are good CLI tools for JSON? json json

What are good CLI tools for JSON?


I just found this:

http://stedolan.github.com/jq/

"jq is a lightweight and flexible command-line JSON processor."

2014 update:

@user456584 mentioned:

There's also the 'json' command (e.g. 'jsontool'). I tend to prefer it over jq. Very UNIX-y. Here's a link to the project: github.com/trentm/json –

in the json README at http://github.com/trentm/json there is a long list of similar things


I have created a module specifically designed for command-line JSON manipulation:

https://github.com/ddopson/underscore-cli

  • FLEXIBLE - THE "swiss-army-knife" tool for processing JSON data - can be used as a simple pretty-printer, or as a full-powered Javascript command-line
  • POWERFUL - Exposes the full power and functionality of underscore.js (plus underscore.string)
  • SIMPLE - Makes it simple to write JS one-liners similar to using "perl -pe"
  • CHAINED - Multiple command invokations can be chained together to create a data processing pipeline
  • MULTI-FORMAT - Rich support for input / output formats - pretty-printing, strict JSON, etc [coming soon]
  • DOCUMENTED - Excellent command-line documentation with multiple examples for every command

It allows you to do powerful things really easily:

cat earthporn.json | underscore select '.data .title'# [ 'Fjaðrárgljúfur canyon, Iceland [OC] [683x1024]',#   'New town, Edinburgh, Scotland [4320 x 3240]',#   'Sunrise in Bryce Canyon, UT [1120x700] [OC]',# ...#   'Kariega Game Reserve, South Africa [3584x2688]',#   'Valle de la Luna, Chile [OS] [1024x683]',#   'Frosted trees after a snowstorm in Laax, Switzerland [OC] [1072x712]' ]cat earthporn.json | underscore select '.data .title' | underscore count# 25underscore map --data '[1, 2, 3, 4]' 'value+1'# prints: [ 2, 3, 4, 5 ]underscore map --data '{"a": [1, 4], "b": [2, 8]}' '_.max(value)'# [ 4, 8 ]echo '{"foo":1, "bar":2}' | underscore map -q 'console.log("key = ", key)'# key = foo# key = barunderscore pluck --data "[{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}]" name# [ 'moe', 'larry', 'curly' ]underscore keys --data '{name : "larry", age : 50}'# [ 'name', 'age' ]underscore reduce --data '[1, 2, 3, 4]' 'total+value'# 10

It has a very nice command-line help system and is extremely flexible. It is well tested and ready for use; however, I'm still building out a few of the features like alternatives for input/output format, and merging in my template handling tool (see TODO.md). If you have any feature requests, comment on this post or add an issue in github. I've designed out a pretty extensive feature-set, but I'd be glad to prioritize features that are needed by members of the community.


One way you could do is to convert it to XML. Following uses two perl modules (JSON and XML::Simple) to do fly-by conversion:

cat test.json | perl -MJSON -MXML::Simple -e 'print XMLout(decode_json(do{local$/;<>}),RootName=>"json")'

which for your example json ends up as:

<json age="200" firstName="Bender" lastName="Robot">  <address city="New York" postalCode="1729" state="NY" streetAddress="123" />  <phoneNumber number="666 555-1234" type="home" />  <phoneNumber number="666 555-4567" type="fax" /></json>