JSPM

@jsonpathx/jsonpathx

0.1.6
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 5
  • Score
    100M100P100Q49266F
  • License MIT

Modern, high-performance JSONPath library with RFC 9535 compliance and jsonpath-plus compatibility.

Package Exports

  • @jsonpathx/jsonpathx
  • @jsonpathx/jsonpathx/umd
  • @jsonpathx/jsonpathx/umd.min

Readme

jsonpathx

Modern, high-performance JSONPath library with RFC 9535 compliance and jsonpath-plus compatibility

Docs CI License: MIT

Interactive JSONPath Playground ๐Ÿ›

Try out JSONPath queries in your browser with the interactive playground: https://jsonpathx-playground.vercel.app/

Why jsonpathx? โšก

jsonpathx is a next-generation JSONPath library that combines standards compliance with a practical, developer-friendly API. It is actively maintained and focused on real-world performance.

The motivation is driven by jsonpath and jsonpath-plus. Both libraries are no longer maintained, so jsonpathx exists to keep development alive, add new features, and make JSONPath tooling more robust.

  • RFC 9535 compliant - implements the official JSONPath standard
  • jsonpath-plus compatible - supports jsonpath-plus extensions and options
  • TypeScript-first - comprehensive type safety
  • Fluent builder API - chainable query composition
  • Multiple result formats - values, paths, pointers, parents, and more
  • Caching built in - LRU with TTL support

Installation ๐Ÿ“ฆ

npm install @jsonpathx/jsonpathx

Quick Start ๐Ÿš€

Basic Usage โœจ

import { JSONPath } from '@jsonpathx/jsonpathx';

const data = {
  store: {
    book: [
      { title: 'Sayings of the Century', price: 8.95 },
      { title: 'Moby Dick', price: 8.99 },
      { title: 'The Lord of the Rings', price: 22.99 }
    ],
    bicycle: { color: 'red', price: 19.95 }
  }
};

const titles = await JSONPath.query('$.store.book[*].title', data);
// ['Sayings of the Century', 'Moby Dick', 'The Lord of the Rings']

const cheapBooks = await JSONPath.query('$.store.book[?(@.price < 10)]', data);
// [{ title: 'Sayings of the Century', price: 8.95 }, { title: 'Moby Dick', price: 8.99 }]

const paths = await JSONPath.paths('$.store.book[*].title', data);
// ['$.store.book[0].title', '$.store.book[1].title', '$.store.book[2].title']

Fluent Builder API ๐Ÿงฉ

import { JSONPath } from '@jsonpathx/jsonpathx';

const result = await JSONPath.create(data)
  .query('$.store.book[*]')
  .filter(book => book.price < 10)
  .sort((a, b) => a.price - b.price)
  .map(book => book.title)
  .take(5)
  .execute();
// ['Sayings of the Century', 'Moby Dick']

Type Selectors ๐Ÿงช

const mixedData = {
  items: [1, "two", 3, "four", null, true, { key: "value" }, [1, 2]]
};

await JSONPath.query('$.items[?(@number())]', mixedData);
await JSONPath.query('$.items[?(@string())]', mixedData);
await JSONPath.query('$.items[?(@scalar())]', mixedData);

Extended Syntax โž•

jsonpathx implements all RFC 9535 features plus jsonpath-plus extensions like:

  • OR operator: $.store.book | $.store.bicycle
  • Grouping: $.store.(book, bicycle)
  • XPath-style filters: $..book[?~@.price<10].author

Performance ๐ŸŽ๏ธ

See the benchmark results generated by the repo scripts (current suite shows jsonpathx leading most queries):

  • bench/results.md
  • apps/docs/bench.md

API Overview ๐Ÿงญ

JSONPath Class ๐Ÿงฑ

await JSONPath.query(path, data, options)
await JSONPath.paths(path, data)
await JSONPath.pointers(path, data)
await JSONPath.parents(path, data)

JSONPath.create(data).query(path).filter(...).execute()

JSONPath.enableCache({ maxSize: 100, ttl: 60000 })
JSONPath.clearCache()
JSONPath.getCacheStats()

Result Types ๐ŸŽฏ

resultType: 'value'
resultType: 'path'
resultType: 'pointer'
resultType: 'parent'
resultType: 'parentProperty'
resultType: 'all'

Documentation ๐Ÿ“š

  • Guide and API docs are in apps/docs
  • Benchmarks: bench/results.md
  • Migration from jsonpath-plus: apps/docs/migration/from-jsonpath-plus.md

Development ๐Ÿ› ๏ธ

npm install
npm test
npm run bench
npm run docs:build

Contributing ๐Ÿค

See CONTRIBUTION.md for contribution guidelines.

License ๐Ÿ“œ

MIT License - see LICENSE.