👋
jq が使えない環境で、JSON をどう扱うか
jq が使えない環境で、JSON をどう扱うか
JSON を扱うとき、
jq のように ドットとパイプで直感的に書けたら楽だと感じる場面は多いと思います。
一方で、現場ではこんな制約に当たることもあります。
-
jqのバイナリが入れられない - 外部依存を増やしたくない
- 既存のスクリプトに自然に組み込みたい
そこで、jq ライクな記法で JSON を扱える軽量ツールを作りました。
JQ::Lite とは?
JQ::Lite は、
jq 風のドット/パイプ記法で JSON を操作できる、依存最小のツールです。
特徴は次の通りです。
- 📦 外部バイナリ不要
- 🧠 jq に近いクエリ記法
- 🔍
select(...)による条件抽出 - 💻 CLI / ライブラリの両対応
「環境を選ばず動く」ことを重視しています。
どんな書き方ができる?
.key.array[].object.keyselect(.foo == "bar")-
.key?(存在しない場合はスキップ) - 組み込み関数
length,keys,sort,unique,first,last,reverse
ネストした条件も書けます。
select(.meta has "key")
Perl から使う
use JQ::Lite;
my $json = '{"users":[{"name":"Alice"},{"name":"Bob"}]}';
my $jq = JQ::Lite->new;
my @names = $jq->run_query($json, '.users[].name');
print join("\n", @names), "\n";
- JSON を decode して手で辿る必要がありません
- jq の感覚でそのまま書けます
CLI として使う
cat users.json | jq-lite '.users[].name'
-
stdin/ ファイル両対応 - ワンライナー用途にも向いています
※ 本家 jq と競合しないよう、コマンド名は jq-lite にしています。
どんな場面に向いている?
| シーン | 選択 |
|---|---|
| jq が使える環境 | jq |
| JSON を手続き的に処理 | 標準 JSON モジュール |
| 環境制約がある / 軽量に済ませたい | JQ::Lite |
リンク
補足
このツールは **Pure Perl(XS・外部依存なし)**で実装しています。
そのため、古い OS や最小構成の環境でも動作します。
まとめ
- jq ライクな記法
- 軽量・依存最小
- CLI / ライブラリ両対応
- 「入らない」「動かない」を避けるための選択肢
必要な場面だけ、静かに役立つツールを目指しています。
Discussion