{"id":34248344,"url":"https://github.com/joshrotenberg/jmespath-extensions","last_synced_at":"2026-02-03T02:19:17.888Z","repository":{"id":328434595,"uuid":"1110965940","full_name":"joshrotenberg/jmespath-extensions","owner":"joshrotenberg","description":"Extended functions for JMESPath queries in Rust","archived":false,"fork":false,"pushed_at":"2026-01-16T04:24:17.000Z","size":4437,"stargazers_count":1,"open_issues_count":28,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-16T13:31:43.670Z","etag":null,"topics":["jmespath","json"],"latest_commit_sha":null,"homepage":"https://joshrotenberg.com/jmespath-extensions/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joshrotenberg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-12-06T02:25:29.000Z","updated_at":"2026-01-16T04:24:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"1e5066ae-397c-4235-aa1d-8c74cd536804","html_url":"https://github.com/joshrotenberg/jmespath-extensions","commit_stats":null,"previous_names":["joshrotenberg/jmespath-extensions"],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/joshrotenberg/jmespath-extensions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshrotenberg%2Fjmespath-extensions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshrotenberg%2Fjmespath-extensions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshrotenberg%2Fjmespath-extensions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshrotenberg%2Fjmespath-extensions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joshrotenberg","download_url":"https://codeload.github.com/joshrotenberg/jmespath-extensions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshrotenberg%2Fjmespath-extensions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28548941,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T14:59:57.589Z","status":"ssl_error","status_checked_at":"2026-01-18T14:59:46.540Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jmespath","json"],"created_at":"2025-12-16T08:09:13.553Z","updated_at":"2026-02-03T02:19:17.874Z","avatar_url":"https://github.com/joshrotenberg.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jmespath-extensions\n\n[![Crates.io](https://img.shields.io/crates/v/jmespath_extensions.svg)](https://crates.io/crates/jmespath_extensions)\n[![Documentation](https://docs.rs/jmespath_extensions/badge.svg)](https://docs.rs/jmespath_extensions)\n[![CI](https://github.com/joshrotenberg/jmespath-extensions/actions/workflows/ci.yml/badge.svg)](https://github.com/joshrotenberg/jmespath-extensions/actions/workflows/ci.yml)\n\nExtended JMESPath with 400+ functions. Available as a CLI, MCP server, Rust library, and Python bindings.\n\n**[Documentation](https://joshrotenberg.github.io/jmespath-extensions/)** | **[Function Reference](https://joshrotenberg.github.io/jmespath-extensions/functions/overview.html)**\n\n## Quick Start\n\n```bash\n# Install\nbrew install joshrotenberg/brew/jpx\n# or: cargo install jpx\n\n# Use it\necho '{\"name\": \"world\"}' | jpx 'upper(name)'\n# \"WORLD\"\n\ncurl -s https://api.github.com/users/octocat | jpx '{\n  login: login,\n  created: format_date(parse_date(created_at), `%B %Y`)\n}'\n# {\"login\": \"octocat\", \"created\": \"January 2011\"}\n```\n\n## What's Included\n\n| Package | Description |\n|---------|-------------|\n| **[jpx](crates/jpx/)** | CLI tool with REPL, multiple output formats |\n| **[jpx-server](crates/jpx-server/)** | MCP server for AI assistants |\n| **[jmespath-extensions](crates/jmespath-extensions/)** | Rust library |\n| **[jmespath-extensions-py](https://pypi.org/project/jmespath-extensions/)** | Python bindings |\n\n## MCP Server\n\nGive Claude (or any MCP client) the ability to query and transform JSON:\n\n```json\n{\n  \"mcpServers\": {\n    \"jpx\": {\n      \"command\": \"jpx-server\"\n    }\n  }\n}\n```\n\n**Tools:** `evaluate`, `batch_evaluate`, `validate`, `functions`, `describe`, `search`, `similar`, `format`, `diff`, `patch`, `merge`, `stats`, `paths`, `keys`\n\n## Function Categories\n\n| Category | Examples |\n|----------|----------|\n| **String** | `upper`, `lower`, `split`, `replace`, `camel_case`, `pad_left` |\n| **Array** | `first`, `last`, `unique`, `chunk`, `zip`, `flatten`, `group_by` |\n| **Math** | `round`, `sqrt`, `median`, `stddev`, `percentile` |\n| **Date/Time** | `now`, `parse_date`, `format_date`, `date_add`, `date_diff` |\n| **Hash** | `md5`, `sha256`, `hmac_sha256`, `crc32` |\n| **Encoding** | `base64_encode`, `base64_decode`, `hex_encode`, `url_encode` |\n| **Regex** | `regex_match`, `regex_extract`, `regex_replace` |\n| **Geo** | `haversine`, `geo_distance_km`, `geo_bearing` |\n| **Network** | `cidr_contains`, `is_private_ip`, `ip_to_int` |\n| **JSON Patch** | `json_patch`, `json_merge_patch`, `json_diff` |\n| **Fuzzy** | `levenshtein`, `jaro_winkler`, `soundex`, `metaphone` |\n| **Expression** | `map_expr`, `filter_expr`, `sort_by_expr`, `group_by_expr` |\n\n[Full function reference](https://joshrotenberg.github.io/jmespath-extensions/functions/overview.html)\n\n## A Taste\n\n```bash\n# Filter and transform\necho '[{\"name\":\"alice\",\"age\":30},{\"name\":\"bob\",\"age\":25}]' \\\n  | jpx '[?age \u003e `26`].{name: upper(name), birth_year: `2024` - age}'\n# [{\"name\": \"ALICE\", \"birth_year\": 1994}]\n\n# Fuzzy matching\njpx 'levenshtein(`kitten`, `sitting`)'\n# 3\n\n# Date arithmetic  \njpx 'format_date(date_add(now(), `7`, `days`), `%Y-%m-%d`)'\n# \"2024-01-24\"\n\n# Network validation\necho '[\"10.0.0.1\", \"8.8.8.8\", \"192.168.1.1\"]' \\\n  | jpx '[?is_private_ip(@)]'\n# [\"10.0.0.1\", \"192.168.1.1\"]\n```\n\n## Library Usage\n\n### Rust\n\n```rust\nuse jmespath_extensions::search;\nuse serde_json::json;\n\nlet data = json!({\"items\": [1, 2, 3, 4, 5]});\nlet result = search(\"sum(items)\", \u0026data)?;\nassert_eq!(result, json!(15));\n```\n\n### Python\n\n```python\nimport jmespath_extensions as jpx\n\ndata = {\"items\": [1, 2, 3, 4, 5]}\nresult = jpx.search(\"sum(items)\", data)\nassert result == 15\n```\n\n## Acknowledgments\n\n- **[JMESPath](https://jmespath.org/)** - The query language specification\n- **[jmespath.rs](https://crates.io/crates/jmespath)** - Rust implementation by [@mtdowling](https://github.com/mtdowling)\n- **[jp](https://github.com/jmespath/jp)** - The official JMESPath CLI\n\n## License\n\nMIT or Apache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoshrotenberg%2Fjmespath-extensions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoshrotenberg%2Fjmespath-extensions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoshrotenberg%2Fjmespath-extensions/lists"}