Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Take valid JSON on stdin, then output it as discrete assignments to make it grep-able

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 README.mkd
Octocat-spinner-32 gron
Octocat-spinner-32 test-input.json
README.mkd

Gron

Gron's purpose is to turn JSON into grep-able, but still valid, JavaScript.

Gron is written in PHP. It requires PHP 5.2 or newer.

Usage

Pipe JSON into Gron's stdin:

~# cat test-input.json | ./gron
json = {};
json["one"] = 1;
json["two"] = 2;
json["three-b"] = "3";
json["four"] = [];
json["four"][0] = 1;
json["four"][1] = 2;
json["four"][2] = 3;
json["four"][3] = 4;
json["five"] = {};
json["five"]["alpha"] = [];
json["five"]["alpha"][0] = "fo";
json["five"]["alpha"][1] = "fum";
json["five"]["beta"] = {};
json["five"]["beta"]["hey"] = "How's tricks?";

The idea is that you can grep the result to find what you're looking for, and where it exists in the JSON structure:

~# cat test-input.json | ./gron | grep tricks
json["five"]["beta"]["hey"] = "How's tricks?";

This is useful when exploring unfamiliar APIs that have large responses but lacklustre documentation.

Gron can also fetch JSON straight from files:

~# ./gron test-input.json | grep tricks
json["five"]["alpha"][1] = "fum";

Or from URLs:

~# ./gron http://api.tomnomnom.com/crypto/blowfish/randomsalt
json = {};
json["salt"] = "$2a$11$6rm6zQm3DaQQqZYjXerBjf";

Exit codes

Gron's exit code depends on what happened:

0 - Success
1 - Failed to decode JSON
2 - Argument is not valid file or URL
3 - Failed to fetch data from URL

Tips

Put Gron in your $PATH (e.g. /usr/bin/gron) so you don't have to use the "./":

~# sudo mv gron /usr/bin/gron
~# cat test-input.json | gron

Instead of:

~# cat test-input.json | ./gron
Something went wrong with that request. Please try again.