node package manager


json is a fast CLI tool for working with JSON. It is a single-file node.js script with no external deps (other than node.js itself). A quick taste:

$ echo '{"foo":"bar"}' | json
  "foo": "bar"

$ echo '{"foo":"bar"}' | json foo

$ echo '{"age":10}' | json -E 'this.age++'
  "age": 11

$ echo '{"latency":32,"req":"POST /widgets"},
{"latency":10,"req":"GET /ping"}
' | json -gaC 'this.latency > 10' req
POST /widgets


  • pretty-printing JSON
  • natural syntax (like JS code) for extracting particular values
  • get details on JSON syntax errors (handy for config files)
  • filter input JSON (see -E and -C options)
  • fast stream processing
  • JSON validation
  • in-place file editing

See for full docs and examples as a man page.

Follow @trentmick for updates to jsontool.


  1. Get node.

  2. npm install -g jsontool (NOT npm install json, that's something else :|)

OR manually:

  1. Get the 'json' script and put it on your PATH somewhere (it is a single file with no external dependencies). For example:

     cd ~/bin
     curl -L > json
     chmod 755 json

You should now have "json" on your PATH:

$ json --version
json 7.0.0

WARNING for Ubuntu/Debian users: There is a current bug in Debian stable such that "apt-get install nodejs" installed a nodejs binary instead of a node binary. You'll either need to create a symlink for node, change the json command's shebang line to "#!/usr/bin/env nodejs" or use chrislea's PPA as discussed on issue #56.

Test suite

make test

You can also limit (somewhat) which tests are run with the TEST_ONLY envvar, e.g.:

cd test && TEST_ONLY=executable nodeunit test.js

I test against node 0.4 (less so now), 0.6, 0.8, and 0.10.


MIT (see the fine LICENSE.txt file).

Module Usage

Since v1.3.1 you can use "jsontool" as a node.js module:

var jsontool = require('jsontool');

However, so far the module API isn't that useful and the CLI is the primary focus.

Alternatives you might prefer