Created a simple query language for JSON data.

Features:

  • Basic query selection
  • Fallback Mechanism
  • Wildcard support
  • Array Slices
  • Multiple Key Selection
  • Key Omission
  • Single Key Omission
  • Functions
  • Comparison Operators
  • Conditions
  • Configurable

Here’s an example to get the list of adult friends:

$.friends[?(@.age >= 18)]

Runs in browsers, and Node.js

Documentation site: https://jqlite.vercel.app/

GitHub: https://github.com/Jay-Karia/jqlite

NPM Package: https://www.npmjs.com/package/jqlite-ts

⭐ Leaving a star on GitHub is much appreciated!

  • footfaults@lemmygrad.ml
    link
    fedilink
    English
    arrow-up
    4
    ·
    2 days ago

    But what about all those hours I spent torturing myself learning jq’s filter syntax, and jmespath ?

    • jay0072007@programming.devOP
      link
      fedilink
      arrow-up
      5
      arrow-down
      1
      ·
      2 days ago

      Thanks for sharing the project! JQLite is aimed to run in browsers and node, but will definitely take inspiration from “jq”.

      • Azzu@lemm.ee
        link
        fedilink
        arrow-up
        14
        ·
        edit-2
        2 days ago

        I just kinda wonder why when you’re in a browser or node, you wouldn’t just do

        const json = {...};
        json.friends.filter(f => f.age >= 18);
        

        why learn another language when you already literally got the language to process JavaScript Object Notation right there.

        • jay0072007@programming.devOP
          link
          fedilink
          arrow-up
          10
          arrow-down
          1
          ·
          2 days ago

          100% agreed. It’s just a learning/hobby project, to know more about parsers, and how languages work. Some of the features like Wildcard, Multiple key selection/omission comes handy, and might add more features like that.

  • _Vi@programming.dev
    link
    fedilink
    arrow-up
    6
    ·
    edit-2
    2 days ago

    At first I thought that it is like SQLite, but for JSON, not just “JQ-lite”.


    Speaking of JSON and queries, it is worth to mention DuckDB’s JSON features. This allows you to use actual SQL to query JSON.

    Here is example of a DuckDB analogue of $.orders[?(@.status.#equals('delivered'))][*].items from JQLite documentation:

    duckdb -c "from (from demo.json select unnest(orders)->>'status' as status, cast(unnest(orders)->'items' as json[]) as items) select unnest(items) as delivered_items where status='delivered'"
    
    ┌─────────────────────────────────────────────────┐
    │                 delivered_items                 │
    │                      json                       │
    ├─────────────────────────────────────────────────┤
    │ {"productId":"p1","quantity":1,"price":1299.99} │
    │ {"productId":"p2","quantity":2,"price":1599.99} │
    └─────────────────────────────────────────────────┘
    
    • jay0072007@programming.devOP
      link
      fedilink
      arrow-up
      3
      arrow-down
      2
      ·
      edit-2
      2 days ago

      That’s actually great to query JSON with SQL! But as you can see the example from DuckDB is quite complex and unreadable as well.

      And I have made this project for learning purpose and to challenge myself.

      However, Thanks for sharing the project.

    • jay0072007@programming.devOP
      link
      fedilink
      arrow-up
      5
      ·
      2 days ago

      That’s a great project! JQLite is mainly focused on query-style approach. Also it’s a hobby project for learning parsers and stuff.