JQ::Lite

JQ::Lite

MetaCPAN GitHub

JQ::Lite is a lightweight, pure-Perl JSON query engine inspired by the jq command-line tool.
It allows you to extract, traverse, and filter JSON data using a simplified jq-like syntax โ€” entirely within Perl.

๐Ÿ”ง Features

๐Ÿค” Why JQ::Lite (vs jq or JSON::PP)?

| Use Case | Tool | |-----------------------|-----------------| | Simple JSON decode | โœ… JSON::PP | | Shell processing | โœ… jq | | jq-style queries in Perl | โœ… JQ::Lite | | Lightweight & portable | โœ… JQ::Lite |

๐Ÿ“ฆ Installation

perl Makefile.PL
make
make test
make install

๐Ÿš€ Usage

As a Perl module

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

As a command-line tool

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

for windows

type user.json | jq-lite ".users[].name"
jq-lite -r ".users[].name" users.json

โš ๏ธ jq-lite is named to avoid conflict with the real jq.

๐Ÿ”„ Interactive Mode

If you omit the query, jq-lite enters interactive mode, allowing you to type queries line-by-line against a fixed JSON input.

jq-lite users.json

JQ::Lite demo

jq-lite interactive mode. Enter query (empty line to quit):
> .users[0].name
"Alice"
> .users[] | select(.age > 25)
{
  "name" : "Alice",
  "age" : 30,
  ...
}

๐Ÿ” v0.19+: Decoder selection and debug output

You can now explicitly select which JSON module to use (JSON::PP, JSON::XS, or Cpanel::JSON::XS) and see what is used with --debug.

$ jq-lite --debug .users[0].age users.json
[DEBUG] Using Cpanel::JSON::XS
30

$ jq-lite --use JSON::PP .users[0].age users.json
30

$ jq-lite --use JSON::PP --debug .users[0].age users.json
[DEBUG] Using JSON::PP
30

๐Ÿ“˜ Example Input

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

Example Queries

jq-lite '.users[].name' users.json
jq-lite '.users | length' users.json
jq-lite '.users[0] | keys' users.json
jq-lite '.users[].nickname?' users.json
jq-lite '.users[] | select(.age > 25)' users.json
jq-lite '.users[] | select(.profile.active == true) | .name' users.json
jq-lite '.users | sort | reverse | first' users.json

๐Ÿงช Testing

prove -l t/

๐Ÿ“ฆ CPAN

๐Ÿ‘‰ JQ::Lite on MetaCPAN

๐Ÿ“ License

This module is released under the same terms as Perl itself.

๐Ÿ‘ค Author

Kawamura Shingo
๐Ÿ“ง pannakoota1@gmail.com
๐Ÿ”— GitHub @kawamurashingo