gron - JSONをコード化して検索しやすくするコマンド
JSONはシステム開発で多用されています。それだけにJSONを扱いやすくするツールがあれば、それだけで生産性が上がることでしょう。システムから出力したJSONを検索したり、目的通りにデータが入っているか確認する機会は多いはずです。 そんな時に使えるのがgronになります。JSONを検索するのに便利なコマンドです。
gronの使い方
gronでの検索例です。一行ごとに並んでいるので値が分かりやすいです。
$ gron "https://api.github.com/repos/tomnomnom/gron/commits?per_page=1" | fgrep "commit.author"
json[0].commit.author = {};
json[0].commit.author.date = "2020-11-07T01:17:42Z";
json[0].commit.author.email = "mail@tomnomnom.com";
json[0].commit.author.name = "Tom Hudson";
目的の部分だけをJSONに戻すこともできます。
$ gron "https://api.github.com/repos/tomnomnom/gron/commits?per_page=1" | fgrep "commit.author" | gron --ungron
[
{
"commit": {
"author": {
"date": "2020-11-07T01:17:42Z",
"email": "mail@tomnomnom.com",
"name": "Tom Hudson"
}
}
}
]
処理している内容です。gronではJSONをJavaScriptのコードにしています。
$ gron $data.json
json = {};
json.$id = "https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/$data.json#";
json.$schema = "http://json-schema.org/draft-06/schema#";
json.additionalProperties = false;
json.description = "Meta-schema for $data reference (JSON-schema extension proposal)";
json.properties = {};
json.properties.$data = {};
json.properties.$data.anyOf = [];
json.properties.$data.anyOf[0] = {};
json.properties.$data.anyOf[0].format = "relative-json-pointer";
json.properties.$data.anyOf[1] = {};
json.properties.$data.anyOf[1].format = "json-pointer";
json.properties.$data.type = "string";
json.required = [];
json.required[0] = "$data";
json.type = "object";
gronではJSONを再現するJavaScriptコードが出力されます。整形とはまた違う形で出力されるので、プログラマーにとっては読みやすいかも知れません。配列になっているのか、オブジェクトなのかも一目で分かります。ぜひAPIを伴う開発で使ってみてください。
gronはGo製のオープンソース・ソフトウェア(MIT License)です。