Skip to content
jq like JSON processor for Rubyists
Ruby Gherkin Dockerfile
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin Fix --raw-output to show Symbol as a raw String Jul 2, 2017
features Fix --raw-output to show Symbol as a raw String Jul 2, 2017
lib/jr/cli Bump Jul 2, 2017
test/unit/core_ext Remove Kernel#itself Dec 27, 2016
Dockerfile Dockerize Sep 25, 2018
Gemfile Initial commit Oct 2, 2014
Rakefile Add task for cucumber Aug 15, 2015

jr: command-line JSON processor for Rubyists

jr is jq like JSON processor.
Its script can be written not a specific language but Ruby!

jr in action


Add this line to your application's Gemfile:

gem 'jr-cli'

And then execute:

$ bundle

Or install it yourself as:

$ gem install jr-cli


jr filter can be written in Ruby!

$ jr [options] <jr filter> [file...]

You can also read JSON not from files but from STDIN.


        --require FILE               require the FILE before execution
    -c, --compact-output             output each JSON in single line
    -f, --from-file FILE             read filter from file
    -r, --raw-output                 output strings as raw output
    -R, --raw-input                  read each line as string
    -C, --color-output               output with colors even if writing to a pipe or a file
    -M, --monochrome-output          output without colors
    -n, --null-input                 use null as input instead of any files
        --unbuffered                 output each JSON without buffering

jr filter tutorial

Let's process JSON of GitHub API!

At first, download JSON of repos into your local to avoid API rate limit.

$ curl -s '' > repos.json

Unwrap Array with Enumerable#unwrap

Because response from GET /users/:username/repos is wrapped with Array, unwrap it using Enumerable#unwrap.
It's a built-in method of jr.
You'll get stream of JSON reperesents repositories.

$ jr 'unwrap' repos.json

Aggregate data with methods of Enumerable

Enumerable has many useful methods and you can transform data with them.

$ jr 'unwrap.group_by(&:language).map{|k, v| [k, v.size] }.sort_by{|k, v| -v }' repos.json

Output as text

You can transform JSONs into String and output as raw text using -r option.

$ jr 'unwrap.group_by(&:language).map{|k, v| [k, v.size] }.sort_by{|k, v| -v }.map{|l, s| "#{s}\t#{l}" }' -r repos.json
28      Ruby
22      PHP
17      Go
12      JavaScript
3       CSS
2       Shell
2       C
1       VimL
1       CoffeeScript
1       Perl

Basic mechanism

It's helpful to know jr's basic mechanism.
Shortly, jr is implemented like below.

json_enumerator.instance_eval { your_jr_filter_runs_here }
# And print its result


  1. Fork it ( )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request
You can’t perform that action at this time.