Releases: jg-rp/json-p3
Releases · jg-rp/json-p3
Version 2.1.0
Changes
- Fixed
JSONPathQuery
serialization.JSONPathQuery.toString()
was not handling name selectors containing'
or\
, and was a bit vague about the format serialized paths would use.JSONPathQuery.toString()
now accepts an options object with a singleform
option.form
can be one of"pretty"
(the default) or"canonical"
. The canonical format uses bracket notation and single quotes, whereas the pretty format uses shorthand notation where possible and double quotes. See issue #30 and PR #32. - Added
JSONPathNode.getPath(options?)
, which returns a string representation of the node's location. As above, theform
option can be one of"pretty"
(the default) or"canonical"
. - Deprecated
JSONPathNode.path
in favour ofJSONPathNode.getPath(options?)
. - Changed the string representation of filter selectors. Both canonical and pretty formats now only include parentheses where necessary.
Version 2.0.0
Breaking changes
These API changes should only affect you if you're customizing the JSONPath parser, defining custom JSONPath selectors or inspecting JSONPath.selectors
(now JSONPathQuery.segments
). Otherwise query parsing and evaluation remains unchanged. See issue 11 for more information.
- Renamed
JSONPath
toJSONPathQuery
to match terminology from RFC 9535. - Refactored
JSONPathQuery
to be composed ofJSONPathSegment
s, each of which is composed of one or more instances ofJSONPathSelector
. - Changed abstract method
JSONPathSelector.resolve
andJSONPathSelector.lazyResolve
to accept a single node argument instead of an array or iterator of nodes. Both still return zero or more nodes.
Version 1.3.5
Fixes
- Fixed a JSON Patch bug where we would not allow moving or copying to the end of an array using the special JSON Pointer token
-
.
Version 1.3.4
Fixes
- Fixed decoding of JSONPath escape sequences (those found in name selectors and string literals). Previously we were relying on
JSON.parse()
to unescape strings, now we have our ownunescapeString()
function that rejects invalid code points and surrogate pairs. See jsonpath-compliance-test-suite #87. - Fixed default minimum integer boundary for JSONPath indexes and slice steps. We were off by one.
- Fixed parsing of JSONPath integer literals with an exponent and an upper case 'e'. We now allow 'e' to be upper case.
- Fixed handling of trailing commas in JSONPath bracketed segments. We now raise a syntax error.
- Fixed handling of invalid JSONPath integer and float literals with extra minus signs, leading zeros or too many zeros. We now raise a syntax error in such cases.
Version 1.3.3
Fixes
- Fixed handling of JSONPath filter expression literals. We now throw a
JSONPathSyntaxError
if a filter expression contains a literal (string, int, float, boolean, null) that is not part of a comparison or function expression. See jsonpath-compliance-test-suite #81.
Version 1.3.2
Fixes
- Fixed more I-Regexp to RegExp pattern mapping. See jsonpath-compliance-test-suite#77.
- We now check that regular expression patterns passed to
match
andsearch
are valid according to RFC 9485. The standard behavior is to silently returnfalse
from these filter function if the pattern is invalid. ThethrowErrors
option can be passed toMatch
and/orSearch
to throw an error instead, and theiRegexpCheck
option can be set tofalse
to disable I-Regexp checks.
Version 1.3.1
Fixes
- Fixed RegExp to I-Regex pattern mapping with the
match
andsearch
filter functions. We now correctly match the special.
character to everything other than\r
and\n
.
Version 1.3.0
Fixes
- Fixed the normalized path for nodes created by the non-standard keys selector. Previously, the normalized path of a node produced from a keys selector would always result in an empty node list, now it uses key selector syntax. Note that this fix only applies when the default key token (
~
) is used. Custom key tokens are problematic when it comes to other, co-operating key selectors. If you're only interested in values from a node list, this wont affect you.
Features
Version 1.2.1
Fixes
- Fixed JSONPath name selectors that operator on array values. Previously, if a name selector were a quoted digit, we would treat that digit as an array index. The name selector now selects nothing if the target value is an array.
- Fixed the lazy JSONPath slice selector. Previously, the lazy slice selector was not slicing values lazily, but creating an intermediate array.
- Fixed JSONPath syntax error messages resulting from unbalanced parentheses or empty paren expressions.
Version 1.2.0
Fixes
- Fixed the error and error message arising from JSONPath queries with filter expressions and a missing closing bracket for the segment. Previously we would get a
JSONPathLexerError
, stating we "can't backup beyond start", which is meant to be an internal error. We now get aJSONPathSyntaxError
with the message "unclosed bracketed selection".
Features
- Added a non-standard keys selector (
~
), selecting property names from objects. The keys selector is only enabled when settingJSONPathEnvironment
'sstrict
option tofalse
(docs, source). - Added a non-standard current key identifier (
#
).#
will be the key or index corresponding to@
in a filter expression. The current key identifier is only enabled when settingJSONPathEnvironment
'sstrict
option tofalse
(docs, source).