Skip to content

Releases: jg-rp/python-jsonpath

Version 1.3.0

04 Feb 08:41
Compare
Choose a tag to compare

Fixes

  • Fixed jsonpath.JSONPathMatch.path. It is now a "normalized path" following section 2.7 of RFC 9535.
  • Fixed normalized slice indexes. We were failing to normalize some indexes given a negative step.

Other changes

  • jsonpath.match.NodeList is now re-exported as jsonpath.NodeList.
  • Added jsonpath.NodeList.paths(), which returns a list of normalized paths, one for each node in the list.
  • Serialization of compiled JSONPath queries (instances of jsonpath.JSONPath) has changed. String literals inside filter selectors are now serialized using the canonical format, as described in section 2.7 of RFC 9535, and parentheses in filter selectors are kept to a minimum.

Version 1.2.2

09 Dec 15:07
Compare
Choose a tag to compare

Fixes

  • Fixed parsing of bare name selectors that start with a reserved word. See issue #72.

Changes

  • We've dropped support for Python 3.7, which was end of life in June 2023.

Version 1.2.1

02 Dec 11:09
Compare
Choose a tag to compare

Fixes

  • Fixed the string representation regex literals in filter expressions. See issue #70.

Version 1.2.0

05 Aug 07:01
Compare
Choose a tag to compare

Fixes

  • Fixed handling of JSONPath literals in filter expressions. We now raise a JSONPathSyntaxError if a filter expression literal is not part of a comparison, membership or function expression. See jsonpath-compliance-test-suite#81.
  • Fixed parsing of number literals including an exponent. Upper case 'e's are now allowed.
  • Fixed handling of trailing commas in bracketed selection lists. We now raise a JSONPathSyntaxError in such cases.

Compliance

  • Skipped tests for invalid escape sequences. The JSONPath spec is more strict than Python's JSON decoder when it comes to parsing \u escape sequences in string literals. We are adopting a policy of least surprise. The assertion is that most people will expect the JSONPath parser to behave the same as Python's JSON parser. See jsonpath-compliance-test-suite #87.
  • Skipped tests for invalid integer and float literals. Same as above. We are deliberately choosing to match Python's int and float parsing behavior. See jsonpath-compliance-test-suite #89.
  • Skipped tests for incorrect casing true, false and null literals.

Features

  • Allow JSONPath filter expression membership operators (contains and in) to operate on object/mapping data as well as arrays/sequences. See #55.
  • Added a select() method to the JSONPath query iterator interface, generating a projection of each JSONPath match by selecting a subset of its values.
  • Added the query() method to the JSONPath class. Get a query iterator from an already compiled path.
  • Added the addne and addap operations to JSONPatch. addne (add if not exists) is like the standard add operation, but only adds object keys/values if the key does not exist. addap (add or append) is like the standard add operation, but assumes an index of - if the target index can not be resolved.

Version 1.1.1

12 Mar 07:13
Compare
Choose a tag to compare

Fixes

  • Fixed evaluation of JSONPath singular queries when they appear in a logical expression and without a comparison operator. Previously we were evaluating logical expressions with the value held by the single element node list, now we treat such filter queries as existence tests. See #57.

Version 1.1.0

07 Mar 15:44
Compare
Choose a tag to compare

Fixes

  • Fixed logical operator precedence in JSONPath filter expressions. Previously, logical or (||) and logical and (&&) had equal precedence. Now && binds more tightly than ||, as per RFC 9535.
  • Fixed JSONPath bracketed selector list evaluation order. Previously we were iterating nodes for every list item, now we exhaust all matches for the first item before moving on to the next item.

Features

  • Added the "query API", a fluent, chainable interface for manipulating JSONPathMatch iterators (docs, source).

Version 1.0.0

23 Feb 11:50
Compare
Choose a tag to compare

RFC 9535 (JSONPath: Query Expressions for JSON) is now out, replacing the draft IETF JSONPath base.

Breaking Changes

  • The undocumented keys function extension is no longer enabled by default. A new, well-typed keys function is planned for the future.

Fixes

  • The lexer now sorts environment-controlled tokens by their length in descending order. This allows one custom token to be a prefix of another.

Features

  • Added the non-standard "fake root" identifier, which defaults to ^ and can be customized with the fake_root_token attribute on a JSONPathEnvironment subclass. Using the fake root identifier is equivalent to the standard root identifier ($), but wraps the target JSON value in an array, so the root value can be conditionally selected using a filter.
  • Non-standard environment-controlled tokens can now be disabled by setting them to the empty string.

Version 0.10.3

02 Jan 16:08
51ec96b
Compare
Choose a tag to compare

Breaking Changes

  • Changed the exception raised when attempting to compare a non-singular filter query from JSONPathSyntaxError to JSONPathTypeError.

Fixes

  • Fixed handling of relative and root queries when used as arguments to filter functions. Previously, when those queries resulted in an empty node list, we were converting them to an empty regular list before passing it to functions that accept ValueType arguments. Now, in such cases, we convert empty node lists to the special result Nothing, which is required by the spec.
  • Fixed well-typedness checks on JSONPath logical expressions (those that involve && or ||) and non-singular filter queries. Previously we were erroneously applying the checks for comparison expressions to logical expressions too. Now non-singular queries in logical expressions act as an existence test. See #45.

Version 0.10.2

13 Oct 10:52
Compare
Choose a tag to compare

Fixes

  • Fixed precedence of the logical not operator in JSONPath filter expressions. Previously, logical or and logical and had priority over not. See #41.

Version 0.10.1

08 Oct 15:53
6f9e3be
Compare
Choose a tag to compare

Hot fix

  • Fixed priority of JSONPath lexer rules. Previously, standard short tokens (like * and ?) had a higher priority than environment controlled tokens (like JSONPathEnvironment.keys_selector_token), making it impossible to incorporate short token characters into longer environment-controlled tokens.