Skip to main content

Extensions for JSONPath RW

Project description

https://travis-ci.org/sileht/python-jsonpath-rw-ext.png?branch=master Latest Version Downloads

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.

Quick Start

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.

Extensions

name

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

About arithmetic and string

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 list

Arithmetic 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]

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page