jsonpath-rust-bindings 0.7.0

Creator: bradpython12

Last updated:

Add to Cart

Description:

jsonpathrustbindings 0.7.0

jsonpath-rust-bindings




This package contains Python bindings for jsonpath-rust library by besok.
The details regarding the JsonPath itself can be found here.
Installation
pip install jsonpath-rust-bindings

Usage
from jsonpath_rust_bindings import Finder

sample = {
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95,
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99,
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99,
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99,
},
],
"bicycle": {"color": "red", "price": 19.95},
},
"expensive": 10,
}

queries = [
'$.store.book[*].author',
'$..book[?(@.isbn)]',
'$.store.*',
'$..author',
'$.store..price',
'$..book[2]',
# '$..book[-2]',
'$..book[0,1]',
'$..book[:2]',
'$..book[1:2]',
'$..book[-2:]',
'$..book[2:]',
'$.store.book[?(@.price<10)]',
'$..book[?(@.price<=$.expensive)]',
"$..book[?(@.author ~= '.*Rees')].price",
'$..*',
]

f = Finder(sample)

for query in queries:
print(query, f.find(query), '\n')

# You will see a bunch of found items like
# $..book[?(@.author ~= '.*Rees')].price [JsonPathResult(data=8.95, path=Some("$.['store'].['book'][0].['price']"), is_new_value=False)]

JsonPathResult has the following attributes:

data: the found value
path: the path to the found value
is_new_value: whether the value is a new value or a copy of the original value

JsonPathResult can't be constructed from Python; it is only returned by Finder.find().
Caveats
The current implementation is cloning the original PyObject data when converting it to the serde Value.
It happens each time you're creating a new Finder instance. Try to reuse the same Finder instance for querying if it's possible.
Also, It has yet another consequence demonstrated in the following example:
>>> original_object_i_want_to_mutate = {'a': {'b': 'sample b'}}
>>> from jsonpath_rust_bindings import Finder
>>> f = Finder(original_object_i_want_to_mutate)
>>> b_dict = f.find('$.a')[0].data
>>> b_dict
{'b': 'sample b'}
>>> b_dict['new'] = 42
>>> original_object_i_want_to_mutate
{'a': {'b': 'sample b'}}

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.