I am considering making a JSON parsing and generating command line tool. Started with looking around a bit. Below is a list of existing JSON command line tools. Numbers are [GitHub stars] at the time of adding the entry.
- jq [11126] – filter, extract, modify and output JSON or text using DSL
- jid [4426] – “You can drill down JSON interactively by using filtering queries like jq.” (item contributed by /u/Tacticus)
- gron [4103] – convert JSON or JSON lines (from file/stdin/url) to text (path=value) which can be processed with grep/sed/diff; the tool also supports converting back to JSON after such processing
- jo [2209] – generate JSON based on command line arguments and stdin; can read data from files and place it as base64 encoded values
- JSON.sh [1635] – written in shell/gawk; “traverses the JSON objects and prints out the path to the current object (as a JSON array) and then the object, without whitespace”
- underscore-cli [1588] ‘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’. Added on 2019-09-30 following comment from @joeytwiddle.
- jsawk [1239] – focused primarily on filtering and transforming a list (or an object). Update 2019-09-30: as @joeytwiddle suggested in comment, the project appears to be unmaintained and doesn’t work with recent Node.js versions. Latest commit and latest closed issue are from 2015.
- json (by trentm) [1218] – “massaging JSON on your Unix command line”; JS-like syntax for extracting values; in-place file editing
- jj [1037] – “JJ is a command line utility that provides a fast and simple way to retrieve or update values from JSON documents. It’s powered by GJSON and SJSON under the hood.” (item contributed by /u/RomanaOswin, 2021-03-28) (also noticed it was mentioned earlier in comments by Harald Hanche-Olsen , sorry did not see that)
- rq [1007] – awk/sed-like tool for structured data; supports several formats, including JSON
- dasel [774] – “Dasel (short for data-selector) allows you to query and modify data structures using selector strings. Comparable to jq / yq, but supports JSON, YAML, TOML, XML and CSV with zero runtime dependencies.” (item contributed by /u/AndydeCleyre, 2021-03-27)
- TickTick [469] – use JSON syntax directly in bash; “This is just a fun hack”
- jtc [427] “cli tool to extract, manipulate and transform source JSON” (item contributed by Dmitry in the comments, 2019, added 2021-03-28)
- jshon [309] – very CLI-ish way to extract, manipulate and output the data
- jl [308] – “a tiny functional language for querying and manipulating JSON”; visually reminds Haskell
- faq [248]. “faq is a tool intended to be a more flexible jq, supporting additional formats. The additional formats are converted into JSON and processed with libjq”. Supports: BSON, Bencode, JSON, TOML, XML, YAML. Added on 2020-10-11.
- jsonpp [244] – JSON pretty printer (item contributed by /u/ferbass)
- fx [227] – conveniently run your JS code to manipulate JSON.
- RecordStream [224] – create, manipulate and output records; supports JSON; Perl-based so grep expressions for example are in Perl.
- JSON.awk [186] – JSON.sh fork in awk; after fork the projects added different features.
- jp [184] – “command line interface to JMESPath” (link contributed by Evgeny Zislis)
- json-command [143] – conveniently manipulate JSON using JS.
- jsonv.sh [130] – convert JSON to CSV; specify paths in JSON to
- jgrep (aka “JSON-grep”) [78] – “Command line tool and API for parsing JSON documents” in Ruby (item contributed by /u/tophlammiepie)
- jello [61]. “Filter JSON and JSON Lines data with Python syntax”. Added on 2020-10-11.
- jsed [48] – manipulate and extract data; somewhat similar to jsawk in mindset
- nvim-jqx [24] “easily browse and preview json files in neovim” using Quickfix buffer (item contributed by /u/evergreengt, 2021-03-28)
- jtbl [21] “A simple cli tool to print JSON data as a table in the terminal.”. Added on 2020-10-11.
- yamlpath [20] “Along with providing a standard for defining YAML Paths, this project aims to provide generally-useful command-line tools which implement YAML Paths.” (item contributed by /u/AndydeCleyre, 2021-03-27)
- jayin [10] “Piping with js at terminal”. Added on 2019-09-30 following comment from @joeytwiddle.
- jsongrep [9] (by dsc) – extract data at given path using shell globs and output one per line
- jc [2] – “jc is used to JSONify the output of many standard linux cli tools”. Added on 2019-10-29 following comment from Kelly Brazil.
- jsongrep [0] (by terrycojones) – easily extract data at given path
Honourable mentions
python -m json.tool
– the JSON Python module (mention contributed by Evgeny Zislis)
Update 2018-09-10
I’ve added related post in which I argue that jq functionality belongs to a shell.
If you feel that some project is missing from the list, please let me know in comments below.