👋

jq が使えない環境で、JSON をどう扱うか

に公開

jq が使えない環境で、JSON をどう扱うか

JSON を扱うとき、
jq のように ドットとパイプで直感的に書けたら楽だと感じる場面は多いと思います。

一方で、現場ではこんな制約に当たることもあります。

  • jq のバイナリが入れられない
  • 外部依存を増やしたくない
  • 既存のスクリプトに自然に組み込みたい

そこで、jq ライクな記法で JSON を扱える軽量ツールを作りました。


JQ::Lite とは?

JQ::Lite は、
jq 風のドット/パイプ記法で JSON を操作できる、依存最小のツールです。

特徴は次の通りです。

  • 📦 外部バイナリ不要
  • 🧠 jq に近いクエリ記法
  • 🔍 select(...) による条件抽出
  • 💻 CLI / ライブラリの両対応

「環境を選ばず動く」ことを重視しています。


どんな書き方ができる?

  • .key
  • .array[]
  • .object.key
  • select(.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