0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

jq風のJSONクエリをPerlで!純Perl製モジュール「JQ::Lite」紹介

Posted at

PerlでJSONを扱う際に、jqのようにスマートにデータを抽出・整形できたらいいなと思ったことはありませんか?

そこで、jqライクな文法でJSONを操作できる軽量モジュール
👉 JQ::Lite を作成&CPANに公開しました。


🔧 JQ::Liteとは?

JQ::Lite は、Perl上で jq のような記述でJSONデータを処理できる純Perl製のモジュールです。

特徴

  • Pure Perl(XS・外部バイナリ不要)
  • ✅ ドット記法 (.users[].name)
  • ✅ オプショナルアクセス (.nickname?)
  • ✅ 配列インデックスや展開 (.users[0], .users[])
  • select(...) による絞り込み(比較演算・論理演算対応)
  • ✅ 組み込み関数多数:length, keys, first, last, reverse, sort, unique, has
  • ✅ CLI対応:jq-lite コマンドで stdin やファイルからも使える

📦 インストール方法

git clone https://github.com/kawamurashingo/JQ-Lite.git
cd JQ-Lite
perl Makefile.PL
make
make test
make install

CPANから直接:

cpanm JQ::Lite

🐪 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";

💻 CLIツールとして使う場合

cat users.json | jq-lite '.users[].name'
jq-lite '.users[] | select(.age > 25)' users.json
jq-lite -r '.users[].name' users.json

jq-lite という名前は本家 jq と競合しないようにしています。


🧪 JSON例とクエリ例

入力(users.json

{
  "users": [
    {
      "name": "Alice",
      "age": 30,
      "profile": {
        "active": true,
        "country": "US"
      }
    },
    {
      "name": "Bob",
      "age": 25,
      "profile": {
        "active": false,
        "country": "JP"
      }
    }
  ]
}

クエリ例

クエリ 説明
.users[].name 全ユーザーの名前を抽出
`.users length`
`.users[0] keys`
.users[].nickname? nicknameがあれば取得(なければスキップ)
.users[] | select(.age > 25) 年齢が25より上のユーザー
.users[] | select(.profile.active == true) | .name activeなユーザーの名前

🤔 どう使い分ける?

やりたいこと ツール
JSONのシンプルなデコード JSON::PP
Bashなどでの高度なJSON処理 jq
Perlの中でjqっぽく書きたい JQ::Lite
軽量&移植性重視でCLIにも使いたい JQ::Lite

🔗 関連リンク


👋 最後に

Perlの中でも 軽快にjq風のクエリを扱いたい というニーズに応えるモジュールです。
フィルタやソート、配列処理などがスッキリ書けて、ワンライナー的にも使いやすいはずです。

ぜひ使ってみて、不具合や要望などあればGitHubのIssueで教えてください!
Starもいただけると励みになります⭐

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?