Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jg-rp/python-jsonpath
A flexible JSONPath engine for Python with JSON Pointer and JSON Patch
https://github.com/jg-rp/python-jsonpath
async json json-pointer jsonpatch jsonpath jsonpath-expression jsonpath-parser jsonpath-syntax jsonpointer pypy3 python python3
Last synced: 6 days ago
JSON representation
A flexible JSONPath engine for Python with JSON Pointer and JSON Patch
- Host: GitHub
- URL: https://github.com/jg-rp/python-jsonpath
- Owner: jg-rp
- License: mit
- Created: 2023-03-22T15:16:59.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-01-29T16:03:22.000Z (13 days ago)
- Last Synced: 2025-01-30T07:11:44.406Z (12 days ago)
- Topics: async, json, json-pointer, jsonpatch, jsonpath, jsonpath-expression, jsonpath-parser, jsonpath-syntax, jsonpointer, pypy3, python, python3
- Language: Python
- Homepage: https://jg-rp.github.io/python-jsonpath/
- Size: 2.04 MB
- Stars: 34
- Watchers: 1
- Forks: 4
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE.txt
Awesome Lists containing this project
README
Python JSONPath
A flexible JSONPath engine for Python.
We follow RFC 9535 and test against the JSONPath Compliance Test Suite.---
**Table of Contents**
- [Install](#install)
- [Links](#links)
- [Related projects](#related-projects)
- [Examples](#examples)
- [License](#license)## Install
Install Python JSONPath using [pip](https://pip.pypa.io/en/stable/getting-started/):
```
pip install python-jsonpath
```Or [Pipenv](https://pipenv.pypa.io/en/latest/):
```
pipenv install -u python-jsonpath
```Or from [conda-forge](https://anaconda.org/conda-forge/python-jsonpath):
```
conda install -c conda-forge python-jsonpath
```## Links
- Documentation: https://jg-rp.github.io/python-jsonpath/.
- JSONPath Syntax: https://jg-rp.github.io/python-jsonpath/syntax/
- Change log: https://github.com/jg-rp/python-jsonpath/blob/main/CHANGELOG.md
- PyPi: https://pypi.org/project/python-jsonpath
- Source code: https://github.com/jg-rp/python-jsonpath
- Issue tracker: https://github.com/jg-rp/python-jsonpath/issues## Related projects
- [JSONPath RFC 9535](https://github.com/jg-rp/python-jsonpath-rfc9535) - A Python implementation of JSONPath that follows RFC 9535 much more strictly. If you require maximum interoperability with JSONPath implemented in other languages - at the expense of extra features - choose [jsonpath-rfc9535](https://pypi.org/project/jsonpath-rfc9535/) over [python-jsonpath](https://pypi.org/project/python-jsonpath/).
jsonpath-rfc9535 matches RFC 9535's JSONPath model internally and is careful to use the spec's terminology. It also includes utilities for verifying and testing the [JSONPath Compliance Test Suite](https://github.com/jsonpath-standard/jsonpath-compliance-test-suite). Most notably the nondeterministic behavior of some JSONPath selectors.
- [JSON P3](https://github.com/jg-rp/json-p3) - RFC 9535 implemented in TypeScript. JSON P3 does not include all the non-standard features of Python JSONPath, but does define some optional [extra syntax](https://jg-rp.github.io/json-p3/guides/jsonpath-extra).
## Examples
### JSONPath
```python
import jsonpathdata = {
"users": [
{"name": "Sue", "score": 100},
{"name": "John", "score": 86},
{"name": "Sally", "score": 84},
{"name": "Jane", "score": 55},
]
}user_names = jsonpath.findall("$.users[[email protected] < 100].name", data)
print(user_names) # ['John', 'Sally', 'Jane']
```### JSON Pointer
We include an [RFC 6901](https://datatracker.ietf.org/doc/html/rfc6901) compliant implementation of JSON Pointer. See JSON Pointer [quick start](https://jg-rp.github.io/python-jsonpath/quickstart/#pointerresolvepointer-data), [guide](https://jg-rp.github.io/python-jsonpath/pointers/) and [API reference](https://jg-rp.github.io/python-jsonpath/api/#jsonpath.JSONPointer)
```python
from jsonpath import pointerdata = {
"users": [
{"name": "Sue", "score": 100},
{"name": "John", "score": 86},
{"name": "Sally", "score": 84},
{"name": "Jane", "score": 55},
]
}sue_score = pointer.resolve("/users/0/score", data)
print(sue_score) # 100jane_score = pointer.resolve(["users", 3, "score"], data)
print(jane_score) # 55
```### JSON Patch
We also include an [RFC 6902](https://datatracker.ietf.org/doc/html/rfc6902) compliant implementation of JSON Patch. See JSON Patch [quick start](https://jg-rp.github.io/python-jsonpath/quickstart/#patchapplypatch-data) and [API reference](https://jg-rp.github.io/python-jsonpath/api/#jsonpath.JSONPatch)
```python
from jsonpath import patchpatch_operations = [
{"op": "add", "path": "/some/foo", "value": {"foo": {}}},
{"op": "add", "path": "/some/foo", "value": {"bar": []}},
{"op": "copy", "from": "/some/other", "path": "/some/foo/else"},
{"op": "add", "path": "/some/foo/bar/-", "value": 1},
]data = {"some": {"other": "thing"}}
patch.apply(patch_operations, data)
print(data) # {'some': {'other': 'thing', 'foo': {'bar': [1], 'else': 'thing'}}}```
## License
`python-jsonpath` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.