Extensions for JSONPath RW
jsonpath-rw-ext extends json-path-rw capabilities by adding multiple extensions. ‘len’ that allows one to get the length of a list. ‘sorted’ that returns a sorted version of a list, ‘arithmetic’ that permits one to make math operation between elements and ‘filter’ to select only certain elements of a list.
Each extensions will be proposed upstream and will stay here only if they are refused.
Free software: Apache license
Documentation: https://python-jsonpath-rw-ext.readthedocs.org/en/latest/
At the command line:
$ pip install jsonpath-rw-ext
Or, if you have virtualenvwrapper installed:
$ mkvirtualenv jsonpath-rw-ext $ pip install jsonpath-rw-ext
To replace the jsonpath_rw parser by this one with:
import jsonpath_rw_ext jsonpath_rw_ext.parse("$.foo").find(...)
Or:
from jsonpath_rw_ext import parser parser.ExtentedJsonPathParser().parse("$.foo").find(...)
Shortcut functions for getting only the matched values:
import jsonpath_rw_ext as jp print jp.match('$.cow[*]', {'cow': ['foo', 'bar'], 'fish': 'foobar'}) # prints ['foo', 'bar'] print jp.match1('$.cow[*]', {'cow': ['foo', 'bar'], 'fish': 'foobar'}) # prints 'foo'
The jsonpath classes are not part of the public API, because the name/structure can change when they will be implemented upstream. Only the syntax shouldn’t change.
Extensionsname
Example
len
$.objects.`len`
sub
$.field.`sub(/foo\\+(.*)/, \\1)`
split
$.field.`split(+, 2, -1)`
$.field.`split(sep, segement, maxsplit)`
sorted
$.objects.`sorted`
$.objects[\some_field]
$.objects[\some_field,/other_field]
filter
$.objects[?(@some_field > 5)]
$.objects[?(some_field = “foobar”)]
$.objects[?(some_field ~ “regexp”)]
$.objects[?(some_field > 5 & other < 2)]
arithmetic (-+*/)
$.foo + “_” + $.bar
$.foo * 12
$.objects[*].cow + $.objects[*].cat
Operations are done with python operators and allows types that python allows, and return [] if the operation can be done due to incompatible types.
When operators are used, a jsonpath must be be fully defined otherwise jsonpath-rw-ext can’t known if the expression is a string or a jsonpath field, in this case it will choice string as type.
Example with data:
{ 'cow': 'foo', 'fish': 'bar' }
cow + fish returns cowfish
$.cow + $.fish returns foobar
$.cow + “_” + $.fish returns foo_bar
$.cow + “_” + fish returns foo_fish
About arithmetic and listArithmetic can be used against two lists if they have the same size.
Example with data:
{'objects': [ {'cow': 2, 'cat': 3}, {'cow': 4, 'cat': 6} ]}
$.objects[*].cow + $.objects[*].cat returns [6, 9]
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4