JSONビューアとjqフィルターエディタを提供してくれる jnv
梅木 和弥
はじめに
みなさんは jq 使いこなされていますか?
ログ解析、API設計/開発等で JSON データを扱う際に jq が活躍すると思います。
ただ、 jq って24/365で利用するツールというよりかは、JSONを扱う業務が続かないと慣れないので、中々習熟しない悩みを持たれている方も多いんじゃないでしょうか?
そんな時、 jnv をはじめとした jq に対話的操作機能を搭載したツールがおすすめです。
本記事では、jnv の導入〜操作感を記事にしております。
jq とは
本記事では、 「jq とは」については割愛させていただきます。
jqは、JSONデータのためのsed、awk、grepなどに似た、軽量で柔軟なコマンドラインJSONプロセッサです。
ポータブルなC言語で書かれており、実行時の依存関係が一切ないため、構造化データのスライス、フィルタリング、マッピング、変換を簡単に行うことができます。公式 説明を翻訳
詳細は以下の記事を参照下さい。
jnv とは
jnvはJSONの閲覧用に設計されており、インタラクティブなJSONビューアとjqフィルターエディタを提供します。
公式 説明を翻訳
公式のキャッチコピー通り、「JSONビューア」と「jqフィルターエディタ」が主機能です。
JSONビューアの機能には、「構文ハイライト」や「UIの反応度(例えばデバウンス時間調整、アニメーション速度調整)」、「JSONビューアのスタイリング」等が組み込まれています。
jqフィルターエディタの機能には、「 <Tab> キーでの自動補完」や「入力値の即時ビューア反映」「フィルターを評価するヒントメッセージ」が組み込まれています。
対象のJSONはファイル、標準が対応されています。
では早速デモ動画をご覧ください。
デモ
今回のデモで利用するJSONデータは https://dummyjson.com/user の curl -s での標準出力を対象とします。

インストール
Homebrew
brew install jnv
Mise
mise use -g jnv
Nix
nix-shell -p jnv
操作感の紹介
操作①: 特定のキーを取得
users 配列内の1行目のオブジェクトの firstName と lastName を取得してみましょう。
クエリの組み立て方は以下ですね。
users配列内を指定- 1行目を指定
firstNameとlastNameを取得
出力結果は 以下のようになる想定。
{
"lastName": "Johnson",
"firstName": "Emily"
}
ではやってみます。
入力内容
.users[0] | {firstName, lastName}

操作②: 条件フィルター
年齢(age)が20代の user を絞り込みましょう。
users配列を展開select(.age => 20 and .age < 30)でフィルタリングidとageを取得。
入力内容
.users[] | select(.age >= 20 and .age 30) | {id, age}

操作③: データの集計
既存のユーザーのJSONデータから、
住所内から地域を抽出し、国ごとのユーザーの数を集計しましょう。
users配列を展開し、地域(address.city)を一覧で取得。group_byで集計。cityと、所属数を格納した新しいJSONを作成。
地域ごとに配列が出来て、所属人数が数字で確認できる想定です。
入力内容
[.users[].address.city] | group_by(.)[] | {city: .[0], count: length}

まとめ
如何でしょうか?
体系的に jq を学べるので、jq に慣れるまでは勿論ですが、慣れている方にもおすすめのツールです。
本記事では触れませんでしたが、jnv で入力したフィルタは ctrl + q でコピー出来ます。
「これだ!」という絞り込み方を決めて、クリップボードにコピーした後、「tail モードでのログ解析」等に役立てそうですね。
以上です、ここまで読んでいただきありがとうございます。
梅木 和弥/ アプリケーションエンジニア
Webのシステム開発における、設計や実装業務に携わっています。
夏と冬だったら冬派、Mr.ChildrenとMrs. GREEN APPLEだったらミスチル派、メッシとロナウドだとメッシ派、きのこと筍だとどっちでもいい派、たいやきは尻尾から食べる派です。

