jmespath-extensions
Extended functions for JMESPath queries in Rust
Documentation
jmespath-extensions
NOTE
This work has moved to https://github.com/joshrotenberg/jpx which includes a full JMESPath Specification
implementation with some performance improvements over the official crate, the full extensions (plus more) implemented here, a higher level "engine"
library that includes meta for both evaluation and function discovery, and the `jpx` CLI tool and the `jpx-mcp` MCP server.
No further development will be done on this repository.
Extended JMESPath with 400+ functions. Rust library and Python bindings.
Installation
Rust
[dependencies]
jmespath_extensions = "0.9"Python
pip install jmespath-extensionsUsage
Rust
use jmespath_extensions::search;
use serde_json::json;
let data = json!({"items": [1, 2, 3, 4, 5]});
let result = search("sum(items)", &data)?;
assert_eq!(result, json!(15));
// String functions
let data = json!({"name": "alice"});
let result = search("upper(name)", &data)?;
assert_eq!(result, json!("ALICE"));
// Date functions
let result = search("format_date(now(), '%Y-%m-%d')", &json!({}))?;
// Array functions
let data = json!({"values": [1, 2, 2, 3, 3, 3]});
let result = search("unique(values)", &data)?;
assert_eq!(result, json!([1, 2, 3]));Python
import jmespath_extensions as jmx
# Basic usage
data = {"items": [1, 2, 3, 4, 5]}
result = jmx.search("sum(items)", data)
assert result == 15
# String functions
result = jmx.search("upper(name)", {"name": "alice"})
assert result == "ALICE"
# Array functions
result = jmx.search("unique(values)", {"values": [1, 2, 2, 3]})
assert result == [1, 2, 3]Function Categories
| Category | Examples |
|---|---|
| String | `upper`, `lower`, `split`, `replace`, `camel_case`, `pad_left` |
| Array | `first`, `last`, `unique`, `chunk`, `zip`, `flatten`, `group_by` |
| Math | `round`, `sqrt`, `median`, `stddev`, `percentile` |
| Date/Time | `now`, `parse_date`, `format_date`, `date_add`, `date_diff` |
| Hash | `md5`, `sha256`, `hmac_sha256`, `crc32` |
| Encoding | `base64_encode`, `base64_decode`, `hex_encode`, `url_encode` |
| Regex | `regex_match`, `regex_extract`, `regex_replace` |
| Geo | `haversine`, `geo_distance_km`, `geo_bearing` |
| Network | `cidr_contains`, `is_private_ip`, `ip_to_int` |
| JSON Patch | `json_patch`, `json_merge_patch`, `json_diff` |
| Fuzzy | `levenshtein`, `jaro_winkler`, `soundex`, `metaphone` |
| Expression | `map_expr`, `filter_expr`, `sort_by_expr`, `group_by_expr` |
See docs.rs for the full function reference.
Related Projects
- **jpx** - CLI, MCP server, and query engine built on this library
- **JMESPath** - The query language specification
- **jmespath.rs** - Rust JMESPath implementation
License
MIT or Apache-2.0
Frequently asked questions
What is jmespath-extensions?
jmespath-extensions is Extended functions for JMESPath queries in Rust
How do I install jmespath-extensions?
Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.
Is jmespath-extensions open source?
Yes — it is hosted on GitHub at https://github.com/joshrotenberg/jmespath-extensions and has 3 stars.
Related MCP tools
an open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM
Search infrastructure for AI
YC (S26) | Open Computer History | Record your screen continuously locally and provide context to your agents (Claude, Codex, Openclaw, Hermes, Runner...)
The fastest and the most accurate file search SDK for AI agents, Neovim, Rust, C, Python, Bun and NodeJS
Semantic version control => entity-level diffs, blame, and impact analysis on top of git. 28 languages via tree-sitter. Built for coding agents.
Fast, local-first web content extraction for LLMs. Scrape, crawl, extract structured data — all from Rust. CLI, REST API, and MCP server.
Run your own MCP server? See who uses it and what to fix.
Measure it with TrackMCP