Full Code of json-path/JsonPath for AI

master 62a4c9f0f65b cached
235 files
1.0 MB
254.0k tokens
2357 symbols
1 requests
Download .txt
Showing preview only (1,154K chars total). Download the full file or copy to clipboard to get everything.
Repository: json-path/JsonPath
Branch: master
Commit: 62a4c9f0f65b
Files: 235
Total size: 1.0 MB

Directory structure:
gitextract_5g0slvqk/

├── .github/
│   └── workflows/
│       └── ci.yml
├── .gitignore
├── .travis.yml
├── LICENSE
├── Procfile
├── README.md
├── build.gradle
├── changelog.md
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── json-path/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── jayway/
│       │               └── jsonpath/
│       │                   ├── Configuration.java
│       │                   ├── Criteria.java
│       │                   ├── DocumentContext.java
│       │                   ├── EvaluationListener.java
│       │                   ├── Filter.java
│       │                   ├── InvalidCriteriaException.java
│       │                   ├── InvalidJsonException.java
│       │                   ├── InvalidModificationException.java
│       │                   ├── InvalidPathException.java
│       │                   ├── JsonPath.java
│       │                   ├── JsonPathException.java
│       │                   ├── MapFunction.java
│       │                   ├── Option.java
│       │                   ├── ParseContext.java
│       │                   ├── PathNotFoundException.java
│       │                   ├── Predicate.java
│       │                   ├── ReadContext.java
│       │                   ├── TypeRef.java
│       │                   ├── ValueCompareException.java
│       │                   ├── WriteContext.java
│       │                   ├── internal/
│       │                   │   ├── CharacterIndex.java
│       │                   │   ├── DefaultsImpl.java
│       │                   │   ├── EvaluationAbortException.java
│       │                   │   ├── EvaluationContext.java
│       │                   │   ├── JsonContext.java
│       │                   │   ├── JsonFormatter.java
│       │                   │   ├── ParseContextImpl.java
│       │                   │   ├── Path.java
│       │                   │   ├── PathRef.java
│       │                   │   ├── Utils.java
│       │                   │   ├── filter/
│       │                   │   │   ├── Evaluator.java
│       │                   │   │   ├── EvaluatorFactory.java
│       │                   │   │   ├── ExpressionNode.java
│       │                   │   │   ├── FilterCompiler.java
│       │                   │   │   ├── LogicalExpressionNode.java
│       │                   │   │   ├── LogicalOperator.java
│       │                   │   │   ├── PatternFlag.java
│       │                   │   │   ├── RelationalExpressionNode.java
│       │                   │   │   ├── RelationalOperator.java
│       │                   │   │   ├── ValueNode.java
│       │                   │   │   └── ValueNodes.java
│       │                   │   ├── function/
│       │                   │   │   ├── ParamType.java
│       │                   │   │   ├── Parameter.java
│       │                   │   │   ├── PassthruPathFunction.java
│       │                   │   │   ├── PathFunction.java
│       │                   │   │   ├── PathFunctionFactory.java
│       │                   │   │   ├── json/
│       │                   │   │   │   ├── Append.java
│       │                   │   │   │   └── KeySetFunction.java
│       │                   │   │   ├── latebinding/
│       │                   │   │   │   ├── ILateBindingValue.java
│       │                   │   │   │   ├── JsonLateBindingValue.java
│       │                   │   │   │   └── PathLateBindingValue.java
│       │                   │   │   ├── numeric/
│       │                   │   │   │   ├── AbstractAggregation.java
│       │                   │   │   │   ├── Average.java
│       │                   │   │   │   ├── Max.java
│       │                   │   │   │   ├── Min.java
│       │                   │   │   │   ├── StandardDeviation.java
│       │                   │   │   │   └── Sum.java
│       │                   │   │   ├── sequence/
│       │                   │   │   │   ├── AbstractSequenceAggregation.java
│       │                   │   │   │   ├── First.java
│       │                   │   │   │   ├── Index.java
│       │                   │   │   │   └── Last.java
│       │                   │   │   └── text/
│       │                   │   │       ├── Concatenate.java
│       │                   │   │       └── Length.java
│       │                   │   └── path/
│       │                   │       ├── ArrayIndexOperation.java
│       │                   │       ├── ArrayIndexToken.java
│       │                   │       ├── ArrayPathToken.java
│       │                   │       ├── ArraySliceOperation.java
│       │                   │       ├── ArraySliceToken.java
│       │                   │       ├── CompiledPath.java
│       │                   │       ├── EvaluationContextImpl.java
│       │                   │       ├── FunctionPathToken.java
│       │                   │       ├── PathCompiler.java
│       │                   │       ├── PathToken.java
│       │                   │       ├── PathTokenAppender.java
│       │                   │       ├── PathTokenFactory.java
│       │                   │       ├── PredicateContextImpl.java
│       │                   │       ├── PredicatePathToken.java
│       │                   │       ├── PropertyPathToken.java
│       │                   │       ├── RootPathToken.java
│       │                   │       ├── ScanPathToken.java
│       │                   │       └── WildcardPathToken.java
│       │                   └── spi/
│       │                       ├── cache/
│       │                       │   ├── Cache.java
│       │                       │   ├── CacheProvider.java
│       │                       │   ├── LRUCache.java
│       │                       │   └── NOOPCache.java
│       │                       ├── json/
│       │                       │   ├── AbstractJsonProvider.java
│       │                       │   ├── GsonJsonProvider.java
│       │                       │   ├── Jackson3JsonNodeJsonProvider.java
│       │                       │   ├── Jackson3JsonProvider.java
│       │                       │   ├── JacksonJsonNodeJsonProvider.java
│       │                       │   ├── JacksonJsonProvider.java
│       │                       │   ├── JakartaJsonProvider.java
│       │                       │   ├── JettisonProvider.java
│       │                       │   ├── JsonOrgJsonProvider.java
│       │                       │   ├── JsonProvider.java
│       │                       │   ├── JsonSmartJsonProvider.java
│       │                       │   └── TapestryJsonProvider.java
│       │                       └── mapper/
│       │                           ├── GsonMappingProvider.java
│       │                           ├── Jackson3MappingProvider.java
│       │                           ├── JacksonMappingProvider.java
│       │                           ├── JakartaMappingProvider.java
│       │                           ├── JsonOrgMappingProvider.java
│       │                           ├── JsonSmartMappingProvider.java
│       │                           ├── MappingException.java
│       │                           ├── MappingProvider.java
│       │                           └── TapestryMappingProvider.java
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── jayway/
│           │           └── jsonpath/
│           │               ├── BaseTest.java
│           │               ├── Configurations.java
│           │               ├── DeepScanTest.java
│           │               ├── EscapeTest.java
│           │               ├── EvaluationListenerTest.java
│           │               ├── FilterCompilerTest.java
│           │               ├── FilterParseTest.java
│           │               ├── FilterTest.java
│           │               ├── GsonJsonProviderTest.java
│           │               ├── InlineFilterTest.java
│           │               ├── Issue_487.java
│           │               ├── Issue_537.java
│           │               ├── Issue_721.java
│           │               ├── Issue_762.java
│           │               ├── Issue_786.java
│           │               ├── Issue_970.java
│           │               ├── Issue_973.java
│           │               ├── Jackson3JsonNodeJsonProviderMapperSupportTest.java
│           │               ├── Jackson3JsonNodeJsonProviderTest.java
│           │               ├── Jackson3Test.java
│           │               ├── JacksonJsonNodeJsonProviderMapperSupportTest.java
│           │               ├── JacksonJsonNodeJsonProviderTest.java
│           │               ├── JacksonTest.java
│           │               ├── JakartaJsonProviderTest.java
│           │               ├── JsonOrgJsonProviderTest.java
│           │               ├── JsonProviderTest.java
│           │               ├── JsonProviderTestObjectMapping.java
│           │               ├── MapperTest.java
│           │               ├── MultiPropTest.java
│           │               ├── OptionsTest.java
│           │               ├── PathCompilerTest.java
│           │               ├── PredicateTest.java
│           │               ├── ProviderInTest.java
│           │               ├── ReadContextTest.java
│           │               ├── ReturnTypeTest.java
│           │               ├── ScientificNotationTest.java
│           │               ├── TapestryJsonProviderTest.java
│           │               ├── TestSuppressExceptions.java
│           │               ├── TestUtils.java
│           │               ├── WriteTest.java
│           │               ├── internal/
│           │               │   ├── JsonContextTest.java
│           │               │   ├── UtilsTest.java
│           │               │   ├── filter/
│           │               │   │   ├── PatternFlagTest.java
│           │               │   │   ├── RegexpEvaluatorTest.java
│           │               │   │   └── RelationalOperatorTest.java
│           │               │   ├── function/
│           │               │   │   ├── BaseFunctionTest.java
│           │               │   │   ├── Issue191.java
│           │               │   │   ├── Issue234.java
│           │               │   │   ├── Issue273.java
│           │               │   │   ├── Issue612.java
│           │               │   │   ├── Issue629.java
│           │               │   │   ├── Issue680.java
│           │               │   │   ├── JSONEntityPathFunctionTest.java
│           │               │   │   ├── KeySetFunctionTest.java
│           │               │   │   ├── NestedFunctionTest.java
│           │               │   │   ├── NumericPathFunctionTest.java
│           │               │   │   └── SequentialPathFunctionTest.java
│           │               │   └── path/
│           │               │       └── PathTokenTest.java
│           │               ├── issue_613.java
│           │               └── old/
│           │                   ├── ArraySlicingTest.java
│           │                   ├── ComplianceTest.java
│           │                   ├── FilterTest.java
│           │                   ├── IssuesTest.java
│           │                   ├── JsonPathTest.java
│           │                   ├── JsonProviderTest.java
│           │                   ├── NullHandlingTest.java
│           │                   └── internal/
│           │                       ├── ArrayIndexFilterTest.java
│           │                       ├── ArrayPathTokenTest.java
│           │                       ├── PredicatePathTokenTest.java
│           │                       ├── PropertyPathTokenTest.java
│           │                       ├── ScanPathTokenTest.java
│           │                       ├── TestBase.java
│           │                       └── TestInternal3.java
│           └── resources/
│               ├── issue_191.json
│               ├── issue_24.json
│               ├── issue_76.json
│               ├── issue_76_2.json
│               ├── json-test-doc.json
│               ├── json_array.json
│               ├── json_array_multiple_delete.json
│               ├── keyset.json
│               └── simplelogger.properties
├── json-path-assert/
│   ├── README.md
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── jayway/
│       │               ├── jsonassert/
│       │               │   ├── JsonAssert.java
│       │               │   ├── JsonAsserter.java
│       │               │   └── impl/
│       │               │       ├── JsonAsserterImpl.java
│       │               │       └── matcher/
│       │               │           ├── CollectionMatcher.java
│       │               │           ├── IsCollectionWithSize.java
│       │               │           ├── IsEmptyCollection.java
│       │               │           ├── IsMapContainingKey.java
│       │               │           ├── IsMapContainingValue.java
│       │               │           └── MapTypeSafeMatcher.java
│       │               └── jsonpath/
│       │                   └── matchers/
│       │                       ├── IsJson.java
│       │                       ├── JsonPathMatchers.java
│       │                       ├── WithJsonPath.java
│       │                       └── WithoutJsonPath.java
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── jayway/
│           │           ├── jsonassert/
│           │           │   └── JsonAssertTest.java
│           │           └── jsonpath/
│           │               └── matchers/
│           │                   ├── DemoTest.java
│           │                   ├── HasNoJsonPathTest.java
│           │                   ├── IsJsonFileTest.java
│           │                   ├── IsJsonStringTest.java
│           │                   ├── IsJsonTest.java
│           │                   ├── JsonPathMatchersTest.java
│           │                   ├── WithJsonPathTest.java
│           │                   ├── WithoutJsonPathTest.java
│           │                   └── helpers/
│           │                       ├── ResourceHelpers.java
│           │                       ├── StrictParsingConfiguration.java
│           │                       └── TestingMatchers.java
│           └── resources/
│               ├── books.json
│               ├── example.json
│               ├── invalid.json
│               ├── links.json
│               └── lotto.json
├── settings.gradle
└── system.properties

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/workflows/ci.yml
================================================
---
name: Java CI

on:
  push:
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java: [ 17, 21 ]
      fail-fast: false
      max-parallel: 4
    name: JDK ${{ matrix.java }}

    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK
        uses: actions/setup-java@v3
        with:
          java-version: ${{ matrix.java }}
          distribution: temurin
          cache: 'gradle'

      - name: Grant execute permission for gradlew
        run: chmod +x gradlew

      - name: Build with Gradle
        run: ./gradlew build --warning-mode all

      - name: Run Tests
        run: ./gradlew check

      - name: Maven Install
        run: ./gradlew clean publishToMavenLocal

...


================================================
FILE: .gitignore
================================================
.idea/
target
*.iws
*.ipr
*.iml
.classpath
.project
.settings
.springBeans
.DS_Store
.gradle
.java-version
TODO
gradle.properties
build
bin/
out/


================================================
FILE: .travis.yml
================================================
language: java

sudo: false

jdk:
 - openjdk17

cache:
  directories:
  - $HOME/.gradle

arch:
  - amd64
  - ppc64le


================================================
FILE: LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2017 Jayway

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: Procfile
================================================
web: java $JAVA_OPTS -Dserver.http.port=$PORT -DresourceBase=json-path-web-test/build/resources/main/webapp/  -jar json-path-web-test/build/libs/json-path-web-test-*-all.jar

================================================
FILE: README.md
================================================
Jayway JsonPath
=====================

**A Java DSL for reading JSON documents.**

[![Build Status](https://travis-ci.org/json-path/JsonPath.svg?branch=master)](https://travis-ci.org/json-path/JsonPath)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.jayway.jsonpath/json-path/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.jayway.jsonpath/json-path)
[![Javadoc](https://www.javadoc.io/badge/com.jayway.jsonpath/json-path.svg)](http://www.javadoc.io/doc/com.jayway.jsonpath/json-path)

Jayway JsonPath is a Java port of [Stefan Goessner JsonPath implementation](http://goessner.net/articles/JsonPath/).

Getting Started
---------------

JsonPath is available at the Central Maven Repository. Maven users add this to your POM.

> [!NOTE]  
> Version 3.0.0 Uses Java 17 baseline to support Jackson 3

```xml

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>3.0.0</version>
</dependency>
```

If you need help ask questions at [Stack Overflow](http://stackoverflow.com/questions/tagged/jsonpath). Tag the
question 'jsonpath' and 'java'.

JsonPath expressions always refer to a JSON structure in the same way as XPath expression are used in combination
with an XML document. The "root member object" in JsonPath is always referred to as `$` regardless if it is an
object or array.

JsonPath expressions can use the dot–notation

`$.store.book[0].title`

or the bracket–notation

`$['store']['book'][0]['title']`

Operators
---------

| Operator                  | Description                                                     |
|:--------------------------|:----------------------------------------------------------------|
| `$`                       | The root element to query. This starts all path expressions.    |
| `@`                       | The current node being processed by a filter predicate.         |
| `*`                       | Wildcard. Available anywhere a name or numeric are required.    |
| `..`                      | Deep scan. Available anywhere a name is required.               |
| `.<name>`                 | Dot-notated child                                               |
| `['<name>' (, '<name>')]` | Bracket-notated child or children                               |
| `[<number> (, <number>)]` | Array index or indexes                                          |
| `[start:end]`             | Array slice operator                                            |
| `[?(<expression>)]`       | Filter expression. Expression must evaluate to a boolean value. |

Functions
---------

Functions can be invoked at the tail end of a path - the input to a function is the output of the path expression.
The function output is dictated by the function itself.

| Function    | Description                                                                          | Output type          |
|:------------|:-------------------------------------------------------------------------------------|:---------------------|
| `min()`     | Provides the min value of an array of numbers                                        | Double               |
| `max()`     | Provides the max value of an array of numbers                                        | Double               |
| `avg()`     | Provides the average value of an array of numbers                                    | Double               | 
| `stddev()`  | Provides the standard deviation value of an array of numbers                         | Double               | 
| `length()`  | Provides the length of an array                                                      | Integer              |
| `sum()`     | Provides the sum value of an array of numbers                                        | Double               |
| `keys()`    | Provides the property keys (An alternative for terminal tilde `~`)                   | `Set<E>`             |
| `concat(X)` | Provides a concatinated version of the path output with a new item                   | like input           |
| `append(X)` | add an item to the json path output array                                            | like input           |
| `first()`   | Provides the first item of an array                                                  | Depends on the array |
| `last()`    | Provides the last item of an array                                                   | Depends on the array |
| `index(X)`  | Provides the item of an array of index: X, if the X is negative, take from backwards | Depends on the array |

Filter Operators
-----------------

Filters are logical expressions used to filter arrays. A typical filter would be `[?(@.age > 18)]` where `@` represents
the current item being processed. More complex filters can be created with logical operators `&&` and `||`. String
literals must be enclosed by single or double quotes (`[?(@.color == 'blue')]` or `[?(@.color == "blue")]`).

| Operator   | Description                                                        |
|:-----------|:-------------------------------------------------------------------|
| `==`       | left is equal to right (note that 1 is not equal to '1')           |
| `!=`       | left is not equal to right                                         |
| `<`        | left is less than right                                            |
| `<=`       | left is less or equal to right                                     |
| `>`        | left is greater than right                                         |
| `>=`       | left is greater than or equal to right                             |
| `=~`       | left matches regular expression  [?(@.name =~ /foo.*?/i)]          |
| `in`       | left exists in right [?(@.size in ['S', 'M'])]                     |
| `nin`      | left does not exists in right                                      |
| `subsetof` | left is a subset of right [?(@.sizes subsetof ['S', 'M', 'L'])]    |
| `anyof`    | left has an intersection with right [?(@.sizes anyof ['M', 'L'])]  |
| `noneof`   | left has no intersection with right [?(@.sizes noneof ['M', 'L'])] |
| `size`     | size of left (array or string) should match right                  |
| `empty`    | left (array or string) should be empty                             |

Path Examples
-------------

Given the json

```javascript
{
    "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
}
```

| JsonPath                                | Result                                                       |
|:----------------------------------------|:-------------------------------------------------------------|
| `$.store.book[*].author`                | The authors of all books                                     |
| `$..author`                             | All authors                                                  |
| `$.store.*`                             | All things, both books and bicycles                          |
| `$.store..price`                        | The price of everything                                      |
| `$..book[2]`                            | The third book                                               |
| `$..book[-2]`                           | The second to last book                                      |
| `$..book[0,1]`                          | The first two books                                          |
| `$..book[:2]`                           | All books from index 0 (inclusive) until index 2 (exclusive) |
| `$..book[1:2]`                          | All books from index 1 (inclusive) until index 2 (exclusive) |
| `$..book[-2:]`                          | Last two books                                               |
| `$..book[2:]`                           | All books from index 2 (inclusive) to last                   |
| `$..book[?(@.isbn)]`                    | All books with an ISBN number                                |
| `$.store.book[?(@.price < 10)]`         | All books in store cheaper than 10                           |
| `$..book[?(@.price <= $['expensive'])]` | All books in store that are not "expensive"                  |
| `$..book[?(@.author =~ /.*REES/i)]`     | All books matching regex (ignore case)                       |
| `$..*`                                  | Give me every thing                                          
| `$..book.length()`                      | The number of books                                          |

Reading a Document
------------------
The simplest most straight forward way to use JsonPath is via the static read API.

```java
String json = "...";

List<String> authors = JsonPath.read(json, "$.store.book[*].author");
```

If you only want to read once this is OK. In case you need to read an other path as well this is not the way
to go since the document will be parsed every time you call JsonPath.read(...). To avoid the problem you can
parse the json first.

```java
String json = "...";
Object document = Configuration.defaultConfiguration().jsonProvider().parse(json);

String author0 = JsonPath.read(document, "$.store.book[0].author");
String author1 = JsonPath.read(document, "$.store.book[1].author");
```

JsonPath also provides a fluent API. This is also the most flexible one.

```java
String json = "...";

ReadContext ctx = JsonPath.parse(json);

List<String> authorsOfBooksWithISBN = ctx.read("$.store.book[?(@.isbn)].author");


List<Map<String, Object>> expensiveBooks = JsonPath
        .using(configuration)
        .parse(json)
        .read("$.store.book[?(@.price > 10)]", List.class);
```

What is Returned When?
----------------------
When using JsonPath in java its important to know what type you expect in your result. JsonPath will automatically
try to cast the result to the type expected by the invoker.

```java
//Will throw an java.lang.ClassCastException    
List<String> list = JsonPath.parse(json).read("$.store.book[0].author");

//Works fine
String author = JsonPath.parse(json).read("$.store.book[0].author");
```

When evaluating a path you need to understand the concept of when a path is `definite`. A path is `indefinite` if it
contains:

* `..` - a deep scan operator
* `?(<expression>)` - an expression
* `[<number>, <number> (, <number>)]` - multiple array indexes

`Indefinite` paths always returns a list (as represented by current JsonProvider).

By default a simple object mapper is provided by the MappingProvider SPI. This allows you to specify the return type you
want and the MappingProvider will
try to perform the mapping. In the example below mapping between `Long` and `Date` is demonstrated.

```java
String json = "{\"date_as_long\" : 1411455611975}";

Date date = JsonPath.parse(json).read("$['date_as_long']", Date.class);
```

If you configure JsonPath to use `JacksonMappingProvider`, `Jackson3MappingProvider`, `GsonMappingProvider`,
or `JakartaJsonProvider` you can even
map your JsonPath output directly into POJO's.

```java
Book book = JsonPath.parse(json).read("$.store.book[0]", Book.class);
```

To obtain full generics type information, use TypeRef.

```java
TypeRef<List<String>> typeRef = new TypeRef<List<String>>() {
};

List<String> titles = JsonPath.parse(JSON_DOCUMENT).read("$.store.book[*].title", typeRef);
```

Predicates
----------
There are three different ways to create filter predicates in JsonPath.

### Inline Predicates

Inline predicates are the ones defined in the path.

```java
List<Map<String, Object>> books = JsonPath.parse(json)
        .read("$.store.book[?(@.price < 10)]");
```

You can use `&&` and `||` to combine multiple predicates `[?(@.price < 10 && @.category == 'fiction')]` ,
`[?(@.category == 'reference' || @.price > 10)]`.

You can use `!` to negate a predicate `[?(!(@.price < 10 && @.category == 'fiction'))]`.

### Filter Predicates

Predicates can be built using the Filter API as shown below:

```java
import static com.jayway.jsonpath.JsonPath.parse;
import static com.jayway.jsonpath.Criteria.where;
import static com.jayway.jsonpath.Filter.filter;
...
        ...

Filter cheapFictionFilter = filter(
        where("category").is("fiction").and("price").lte(10D)
);

List<Map<String, Object>> books =
        parse(json).read("$.store.book[?]", cheapFictionFilter);

```

Notice the placeholder `?` for the filter in the path. When multiple filters are provided they are applied in order
where the number of placeholders must match
the number of provided filters. You can specify multiple predicate placeholders in one filter operation `[?, ?]`, both
predicates must match.

Filters can also be combined with 'OR' and 'AND'

```java
Filter fooOrBar = filter(
        where("foo").exists(true)).or(where("bar").exists(true)
);

Filter fooAndBar = filter(
        where("foo").exists(true)).and(where("bar").exists(true)
);
```

### Roll Your Own

Third option is to implement your own predicates

```java 
Predicate booksWithISBN = new Predicate() {
    @Override
    public boolean apply(PredicateContext ctx) {
        return ctx.item(Map.class).containsKey("isbn");
    }
};

List<Map<String, Object>> books =
        reader.read("$.store.book[?].isbn", List.class, booksWithISBN);
```

Path vs Value
-------------
In the Goessner implementation a JsonPath can return either `Path` or `Value`. `Value` is the default and what all the
examples above are returning. If you rather have the path of the elements our query is hitting this can be achieved with
an option.

```java
Configuration conf = Configuration.builder()
        .options(Option.AS_PATH_LIST).build();

List<String> pathList = using(conf).parse(json).read("$..author");

assertThat(pathList).

containsExactly(
    "$['store']['book'][0]['author']",
            "$['store']['book'][1]['author']",
            "$['store']['book'][2]['author']",
            "$['store']['book'][3]['author']");
```

Set a value
-----------
The library offers the possibility to set a value.

```java
String newJson = JsonPath.parse(json).set("$['store']['book'][0]['author']", "Paul").jsonString();
```

Tweaking Configuration
----------------------

### Options

When creating your Configuration there are a few option flags that can alter the default behaviour.

**DEFAULT_PATH_LEAF_TO_NULL**
<br/>
This option makes JsonPath return null for missing leafs. Consider the following json

```javascript
[
   {
      "name" : "john",
      "gender" : "male"
   },
   {
      "name" : "ben"
   }
]
```

```java
Configuration conf = Configuration.defaultConfiguration();

//Works fine
String gender0 = JsonPath.using(conf).parse(json).read("$[0]['gender']");
//PathNotFoundException thrown
String gender1 = JsonPath.using(conf).parse(json).read("$[1]['gender']");

Configuration conf2 = conf.addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL);

//Works fine
String gender0 = JsonPath.using(conf2).parse(json).read("$[0]['gender']");
//Works fine (null is returned)
String gender1 = JsonPath.using(conf2).parse(json).read("$[1]['gender']");
```

**ALWAYS_RETURN_LIST**
<br/>
This option configures JsonPath to return a list even when the path is `definite`.

```java
Configuration conf = Configuration.defaultConfiguration();

//ClassCastException thrown
List<String> genders0 = JsonPath.using(conf).parse(json).read("$[0]['gender']");

Configuration conf2 = conf.addOptions(Option.ALWAYS_RETURN_LIST);

//Works fine
List<String> genders0 = JsonPath.using(conf2).parse(json).read("$[0]['gender']");
``` 

**SUPPRESS_EXCEPTIONS**
<br/>
This option makes sure no exceptions are propagated from path evaluation. It follows these simple rules:

* If option `ALWAYS_RETURN_LIST` is present an empty list will be returned
* If option `ALWAYS_RETURN_LIST` is **NOT** present null returned

**REQUIRE_PROPERTIES**
</br>
This option configures JsonPath to require properties defined in path when an `indefinite` path is evaluated.

```java
Configuration conf = Configuration.defaultConfiguration();

//Works fine
List<String> genders = JsonPath.using(conf).parse(json).read("$[*]['gender']");

Configuration conf2 = conf.addOptions(Option.REQUIRE_PROPERTIES);

//PathNotFoundException thrown
List<String> genders = JsonPath.using(conf2).parse(json).read("$[*]['gender']");
```

### JsonProvider SPI

JsonPath is shipped with five different JsonProviders:

* [JsonSmartJsonProvider](https://github.com/netplex/json-smart-v2) (default)
* [JacksonJsonProvider](https://github.com/FasterXML/jackson)
* [JacksonJsonNodeJsonProvider](https://github.com/FasterXML/jackson)
* [JacksonJson3Provider](https://github.com/FasterXML/jackson)
* [JacksonJson3NodeJsonProvider](https://github.com/FasterXML/jackson)
* [GsonJsonProvider](https://code.google.com/p/google-gson/)
* [JsonOrgJsonProvider](https://github.com/stleary/JSON-java)
* [JakartaJsonProvider](https://javaee.github.io/jsonp/)

Changing the configuration defaults as demonstrated should only be done when your application is being initialized.
Changes during runtime is strongly discouraged, especially in multi threaded applications.

```java
Configuration.setDefaults(new Configuration.Defaults() {

    private final JsonProvider jsonProvider = new JacksonJsonProvider();
    private final MappingProvider mappingProvider = new JacksonMappingProvider();

    @Override
    public JsonProvider jsonProvider () {
        return jsonProvider;
    }

    @Override
    public MappingProvider mappingProvider () {
        return mappingProvider;
    }

    @Override
    public Set<Option> options () {
        return EnumSet.noneOf(Option.class);
    }
});
```

Note that the JacksonJsonProvider requires `com.fasterxml.jackson.core:jackson-databind:2.20.1`, the
Jackson3JsonProvider requires `tools.jackson.core:jackson-databind:3.0.3` and the GsonJsonProvider
requires `com.google.code.gson:gson:2.3.1` on your classpath.

Both of Jakarta EE 9 [JSON-P (JSR-342)](https://javaee.github.io/jsonp/) and [JSON-B (JSR-367)](http://json-b.net/)
providers expect at least Java 8 and require compatible JSON API implementations (such
as [Eclipse Glassfish](https://projects.eclipse.org/projects/ee4j.jsonp)
and [Eclipse Yasson](https://projects.eclipse.org/projects/ee4j.yasson)) on application runtime classpath; such
implementations may also be provided by Java EE application container. Please also note that Apache Johnzon is not
classpath-compatible with Jakarta EE 9 specification yet, and if JSON-B mapping provider is chosen then JSON-P provider
must be configured and used, too.

One peculiarity of Jakarta EE 9 specifications for JSON processing and databinding (mapping) is immutability of Json
arrays and objects as soon as they are fully parsed or written to. To respect the API specification, but allow JsonPath
to modify Json documents through add, set/put, replace, and delete operations, `JakartaJsonProvider` has to be
initiliazed with optional `true` argument:

* `JsonProvider jsonProvider = new JakartaJsonProvider(true)` (enable mutable Json arrays and objects)
* `JsonProvider jsonProvider = new JakartaJsonProvider()` (default, strict JSON-P API compliance)

All lookup and read operations with JsonPath are supported regardless of initilization mode. Default mode also needs
less memory and is more performant.

### Cache SPI

In JsonPath 2.1.0 a new Cache SPI was introduced. This allows API consumers to configure path caching in a way that
suits their needs. The cache must be configured before it is accesses for the first time or a JsonPathException is
thrown. JsonPath ships with two cache implementations

* `com.jayway.jsonpath.spi.cache.LRUCache` (default, thread safe)
* `com.jayway.jsonpath.spi.cache.NOOPCache` (no cache)

If you want to implement your own cache the API is simple.

```java
CacheProvider.setCache(new Cache() {
    //Not thread safe simple cache
    private Map<String, JsonPath> map = new HashMap<String, JsonPath>();

    @Override
    public JsonPath get (String key){
        return map.get(key);
    }

    @Override
    public void put (String key, JsonPath jsonPath){
        map.put(key, jsonPath);
    }
});
```

[![Analytics](https://ga-beacon.appspot.com/UA-54945131-1/jsonpath/index)](https://github.com/igrigorik/ga-beacon)


================================================
FILE: build.gradle
================================================
buildscript {
    repositories {
        mavenCentral()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath 'biz.aQute.bnd:biz.aQute.bnd.gradle:6.1.0'
    }
}

ext {
    libs = [
            jsonSmart       : 'net.minidev:json-smart:2.6.0',
            slf4jApi        : 'org.slf4j:slf4j-api:2.0.17',
            gson            : 'com.google.code.gson:gson:2.13.2',
            hamcrest        : 'org.hamcrest:hamcrest:3.0',
            jacksonDatabind : 'com.fasterxml.jackson.core:jackson-databind:2.20.1',
            jacksonDatabind3: 'tools.jackson.core:jackson-databind:3.0.4',
            jettison        : 'org.codehaus.jettison:jettison:1.5.4',
            jsonOrg         : 'org.json:json:20250517',
            tapestryJson    : 'org.apache.tapestry:tapestry-json:5.9.0',
            jakartaJsonP    : 'jakarta.json:jakarta.json-api:2.1.3',
            jakartaJsonB    : 'jakarta.json.bind:jakarta.json.bind-api:2.0.0',

            test            : [
                    'commons-io:commons-io:2.20.0',
                    'org.junit.jupiter:junit-jupiter:5.10.1',
                    'org.assertj:assertj-core:3.25.1',
                    'org.hamcrest:hamcrest:3.0',
                    'org.glassfish:jakarta.json:2.0.1',
                    'org.eclipse:yasson:2.0.4',
                    'org.slf4j:slf4j-simple:2.0.17',
                    'com.google.code.gson:gson:2.13.2',
                    'org.hamcrest:hamcrest:3.0',
                    'com.fasterxml.jackson.core:jackson-databind:2.20.1',
                    'tools.jackson.core:jackson-databind:3.0.3',
                    'org.codehaus.jettison:jettison:1.5.4',
                    'org.json:json:20250517',
                    'org.apache.tapestry:tapestry-json:5.9.0',
                    'jakarta.json:jakarta.json-api:2.1.3',
                    'jakarta.json.bind:jakarta.json.bind-api:2.0.0'

            ]
    ]
    snapshotVersion = false
}

allprojects {
    ext.displayName = null
    ext.buildTimestamp = new Date().format('yyyy-MM-dd HH:mm:ss')

    group = 'com.jayway.jsonpath'
    version = '3.0.0' + (snapshotVersion ? "-SNAPSHOT" : "")
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'java-library'
    apply plugin: 'maven-publish'
    apply plugin: 'signing'
    apply plugin: 'biz.aQute.bnd.builder'

    java {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }

    repositories {
        mavenCentral()
    }

    java {
        withJavadocJar()
        withSourcesJar()
    }

    test {
        useJUnitPlatform()
        testLogging {
            events "passed", "skipped", "failed"
        }
    }

    signing {
        sign publishing.publications
        required { !snapshotVersion && gradle.taskGraph.hasTask("publish") }
    }

    javadoc {
        if (JavaVersion.current().isJava8Compatible()) {
            options.addStringOption('Xdoclint:none', '-quiet')
        }

        if (JavaVersion.current().isJava9Compatible()) {
            options.addBooleanOption('html5', true)
        }
    }

    publishing {
        repositories {
            maven {
                name = 'ossrh-staging-api'
                url = 'https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/'
                credentials {
                    username = project.hasProperty('sonatypeOssUsername') ? sonatypeOssUsername : "Unknown user"
                    password = project.hasProperty('sonatypeOssPassword') ? sonatypeOssPassword : "Unknown password"
                }
            }
        }
        publications {
            mavenJava(MavenPublication) {
                from components.java

                artifactId = project.name
                //artifactId = jar.archiveBaseName

                pom {
                    name = project.name
                    description = 'A library to query and verify JSON'
                    url = 'https://github.com/jayway/JsonPath'

                    licenses {
                        license {
                            name = "The Apache Software License, Version 2.0"
                            url = "https://www.apache.org/licenses/LICENSE-2.0.txt"
                            distribution = "repo"
                        }
                    }

                    scm {
                        url = 'scm:git:git://github.com/jayway/JsonPath.git'
                        connection = 'scm:git:git://github.com/jayway/JsonPath.git'
                        developerConnection = 'scm:git:git://github.com/jayway/JsonPath.git'
                    }

                    developers {
                        developer {
                            id = 'kalle.stenflo'
                            name = 'Kalle Stenflo'
                            email = 'kalle.stenflo (a) gmail.com'
                        }
                    }
                }
            }
        }
    }
}

wrapper {
    gradleVersion = '8.5'
}



================================================
FILE: changelog.md
================================================
2.2.0 (2016-02-29)
===========
* Upgraded dependency versions
* Hamcrest-matcher support in json-path-assert
* Bug fixes and improvements

2.1.0 (2015-11-22)
===========
* Upgraded dependency versions
* Introduced Cache SPI
* Introduced path functions
* Introduced JsonOrgJsonProvider
* OSGI improvements
* Inline filters supports same operators as Filter builders
* Improved filter evaluation
* Internal makeovers
* New write operations : map(...) and renameKey(...)

2.0.0 (2015-03-19)
=================
* Upgraded dependency versions
* Moved JsonProvider and MappingProvider implementations out of the interal package **OSGi**
* Removed HTTP provider and methods
* Add an unwrap(Object) method to JsonProvider, use it when extracting values for Criteria evaluation **breaks JsonProvider SPI**
* Fixed issue #71 - esacpe character in inline predicates 
  `JsonPath.read(json, "$.logs[?(@.message == 'it\\'s here')].message");`
* New method `jsonString()` added to `ReadContext` and `WriteContext` to extract json model as a string  
* Path does not have to be definite in filter API `filter(where("authors[*].lastName").contains("Waugh"))`

1.2.0 (2014-11-11)
==================
* Added EvaluationListener interface that allows abortion of evaluation if criteria is fulfilled.
  this makes it possible to limit the number of results to fetch when a document is scanned. Also 
  added utility method to limit results `JsonPath.parse(json).limit(1).read("$..title", List.class);`
* Added support for OR in inline filters `[?(@.foo == 'bar' || @.foo == 'baz')]` 
* Upgrade json-smart to 2.1.0
* Support for Update and Delete by path. **breaks JsonProvider SPI**
  `parse(JSON_DOCUMENT).set("$.store.book[*].display-price", 1)`
  `parse(JSON_DOCUMENT).put("$.store.book[1]", "new-key", "new-val")`
  `parse(JSON_DOCUMENT).add("$.store.book", newBook)`
  `parse(JSON_DOCUMENT).delete("$.store.book[1].display-price")`
* Support regex in inline filters (ruby syntax)
  `parse(JSON_DOCUMENT).read("$.store.book[?(@.category =~ /reference/)].author")`
  `parse(JSON_DOCUMENT).read("$.store.book[?(@.category =~ /REFERENCE/i)].author")`
* Inline filter does not require path statement on left side of operator  
  `parse(JSON_DOCUMENT).read("$.store.book[?(@.category == 'reference')].author")`    
  `parse(JSON_DOCUMENT).read("$.store.book[?('reference' == @.category)].author")`    
* Negate exist checks in inline filters (not defined or null) 
  `parse(JSON_DOCUMENT).read("$.store.book[?(!@.isbn)]")`    
* Improved object mapping with Jackson and Gson (now handles generic types)
* JacksonJsonNodeJsonProvider supporting path operations on `com.fasterxml.jackson.databind.JsonNode`
* Exceptions thrown by JsonPath.compile are now wrapped in an InvalidPathException
* Fixed Deep scanning issue (#60) 

1.1.0 (2014-10-01)
==================
* Reintroduced method JsonProvider.createMap(). This should never have been removed. **NOTE: This is a breaking change if you implemented your own JsonProvider based on the 1.0.0 API**  
* Filters threw exception if an item being filtered did not contain the path being filtered upon.
* Multi-property selects works as it did in 0.9. e.g. `$[*]['category', 'price']` 
* Cache results when predicates refer to path in document e.g. `$[*][?(@.price <= $.max-price)]` will only evaluate `$.max-price` once.   

1.0.0 (2014-09-26)
==================
* Complete rewrite of internals. Major API changes.
* Better compliance with the Goessner implementation

Release history
===============
* 0.9.0 (2013-09-26)
* 0.8.1 (2012-04-16)
* 0.8.0 (2012-03-08)
* 0.5.6 (2012-02-09)
* 0.5.5 (2011-07-15)
* 0.5.4 (2011-06-26)
* 0.5.3 (2011-02-18)
* 0.5.2 (2011-02-08)




================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


================================================
FILE: gradlew
================================================
#!/bin/sh

#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

##############################################################################
#
#   Gradle start up script for POSIX generated by Gradle.
#
#   Important for running:
#
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
#       noncompliant, but you have some other compliant shell such as ksh or
#       bash, then to run this script, type that shell name before the whole
#       command line, like:
#
#           ksh Gradle
#
#       Busybox and similar reduced shells will NOT work, because this script
#       requires all of these POSIX shell features:
#         * functions;
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
#         * compound commands having a testable exit status, especially «case»;
#         * various built-in commands including «command», «set», and «ulimit».
#
#   Important for patching:
#
#   (2) This script targets any POSIX shell, so it avoids extensions provided
#       by Bash, Ksh, etc; in particular arrays are avoided.
#
#       The "traditional" practice of packing multiple parameters into a
#       space-separated string is a well documented source of bugs and security
#       problems, so this is (mostly) avoided, by progressively accumulating
#       options in "$@", and eventually passing that to Java.
#
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
#       see the in-line comments for details.
#
#       There are tweaks for specific operating systems such as AIX, CygWin,
#       Darwin, MinGW, and NonStop.
#
#   (3) This script is generated from the Groovy template
#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
#       within the Gradle project.
#
#       You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################

# Attempt to set APP_HOME

# Resolve links: $0 may be a link
app_path=$0

# Need this for daisy-chained symlinks.
while
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
    [ -h "$app_path" ]
do
    ls=$( ls -ld "$app_path" )
    link=${ls#*' -> '}
    case $link in             #(
      /*)   app_path=$link ;; #(
      *)    app_path=$APP_HOME$link ;;
    esac
done

APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit

APP_NAME="Gradle"
APP_BASE_NAME=${0##*/}

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum

warn () {
    echo "$*"
} >&2

die () {
    echo
    echo "$*"
    echo
    exit 1
} >&2

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
esac

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD=java
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
    case $MAX_FD in #(
      max*)
        MAX_FD=$( ulimit -H -n ) ||
            warn "Could not query maximum file descriptor limit"
    esac
    case $MAX_FD in  #(
      '' | soft) :;; #(
      *)
        ulimit -n "$MAX_FD" ||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
    esac
fi

# Collect all arguments for the java command, stacking in reverse order:
#   * args from the command line
#   * the main class name
#   * -classpath
#   * -D...appname settings
#   * --module-path (only if needed)
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.

# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )

    JAVACMD=$( cygpath --unix "$JAVACMD" )

    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    for arg do
        if
            case $arg in                                #(
              -*)   false ;;                            # don't mess with options #(
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
                    [ -e "$t" ] ;;                      #(
              *)    false ;;
            esac
        then
            arg=$( cygpath --path --ignore --mixed "$arg" )
        fi
        # Roll the args list around exactly as many times as the number of
        # args, so each arg winds up back in the position where it started, but
        # possibly modified.
        #
        # NB: a `for` loop captures its iteration list before it begins, so
        # changing the positional parameters here affects neither the number of
        # iterations, nor the values presented in `arg`.
        shift                   # remove old arg
        set -- "$@" "$arg"      # push replacement arg
    done
fi

# Collect all arguments for the java command;
#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
#     shell script including quotes and variable substitutions, so put them in
#     double quotes to make sure that they get re-expanded; and
#   * put everything else in single quotes, so that it's not re-expanded.

set -- \
        "-Dorg.gradle.appname=$APP_BASE_NAME" \
        -classpath "$CLASSPATH" \
        org.gradle.wrapper.GradleWrapperMain \
        "$@"

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
#   set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#

eval "set -- $(
        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
        xargs -n1 |
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
        tr '\n' ' '
    )" '"$@"'

exec "$JAVACMD" "$@"


================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem      https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem

@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar


@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: json-path/build.gradle
================================================
description = "Java port of Stefan Goessner JsonPath."

jar {
    bnd(
            'Automatic-Module-Name': 'json.path',
            'Implementation-Title': 'json-path', 'Implementation-Version': archiveVersion,
            'Import-Package': 'org.json.*;resolution:=optional, com.google.gson.*;resolution:=optional, com.fasterxml.jackson.*;resolution:=optional, org.apache.tapestry5.json.*;resolution:=optional, org.codehaus.jettison.*;resolution:=optional, jakarta.json.*;resolution:=optional, *',
            'Export-Package': 'com.jayway.jsonpath,com.jayway.jsonpath.spi,com.jayway.jsonpath.spi.cache,com.jayway.jsonpath.spi.json,com.jayway.jsonpath.spi.mapper'
    )
}

dependencies {
    implementation libs.jsonSmart
    implementation libs.slf4jApi
    compileOnly libs.jacksonDatabind // , optional
    compileOnly libs.jacksonDatabind3 // , optional
    compileOnly libs.gson// , optional
    compileOnly libs.jsonOrg// , optional
    compileOnly libs.tapestryJson// , optional
    compileOnly libs.jettison// , optional
    compileOnly libs.jakartaJsonP// , optional
    compileOnly libs.jakartaJsonB// , optional

    testImplementation libs.test
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/Configuration.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

import com.jayway.jsonpath.internal.DefaultsImpl;
import com.jayway.jsonpath.spi.json.JsonProvider;
import com.jayway.jsonpath.spi.mapper.MappingProvider;

import java.util.*;

import static com.jayway.jsonpath.internal.Utils.notNull;
import static java.util.Arrays.asList;

/**
 * Immutable configuration object
 */
public class Configuration {

    private static Defaults DEFAULTS = null;

    /**
     * Set Default configuration
     * @param defaults default configuration settings
     */
    public static synchronized void setDefaults(Defaults defaults){
        DEFAULTS = defaults;
    }

    private static Defaults getEffectiveDefaults(){
        if (DEFAULTS == null) {
          return DefaultsImpl.INSTANCE;
        } else {
          return DEFAULTS;
        }
    }

    private final JsonProvider jsonProvider;
    private final MappingProvider mappingProvider;
    private final Set<Option> options;
    private final Collection<EvaluationListener> evaluationListeners;

    private Configuration(JsonProvider jsonProvider, MappingProvider mappingProvider, EnumSet<Option> options, Collection<EvaluationListener> evaluationListeners) {
        notNull(jsonProvider, "jsonProvider can not be null");
        notNull(mappingProvider, "mappingProvider can not be null");
        notNull(options, "setOptions can not be null");
        notNull(evaluationListeners, "evaluationListeners can not be null");
        this.jsonProvider = jsonProvider;
        this.mappingProvider = mappingProvider;
        this.options = Collections.unmodifiableSet(options);
        this.evaluationListeners = Collections.unmodifiableCollection(evaluationListeners);
    }

    /**
     * Creates a new Configuration by the provided evaluation listeners to the current listeners
     * @param evaluationListener listeners
     * @return a new configuration
     */
    public Configuration addEvaluationListeners(EvaluationListener... evaluationListener){
        return Configuration.builder().jsonProvider(jsonProvider).mappingProvider(mappingProvider).options(options).evaluationListener(evaluationListener).build();
    }

    /**
     * Creates a new Configuration with the provided evaluation listeners
     * @param evaluationListener listeners
     * @return a new configuration
     */
    public Configuration setEvaluationListeners(EvaluationListener... evaluationListener){
        return Configuration.builder().jsonProvider(jsonProvider).mappingProvider(mappingProvider).options(options).evaluationListener(evaluationListener).build();
    }

    /**
     * Returns the evaluation listeners registered in this configuration
     * @return the evaluation listeners
     */
    public Collection<EvaluationListener> getEvaluationListeners(){
        return evaluationListeners;
    }

    /**
     * Creates a new Configuration based on the given {@link com.jayway.jsonpath.spi.json.JsonProvider}
     * @param newJsonProvider json provider to use in new configuration
     * @return a new configuration
     */
    public Configuration jsonProvider(JsonProvider newJsonProvider) {
        return Configuration.builder().jsonProvider(newJsonProvider).mappingProvider(mappingProvider).options(options).evaluationListener(evaluationListeners).build();
    }

    /**
     * Returns {@link com.jayway.jsonpath.spi.json.JsonProvider} used by this configuration
     * @return jsonProvider used
     */
    public JsonProvider jsonProvider() {
        return jsonProvider;
    }

    /**
     * Creates a new Configuration based on the given {@link com.jayway.jsonpath.spi.mapper.MappingProvider}
     * @param newMappingProvider mapping provider to use in new configuration
     * @return a new configuration
     */
    public Configuration mappingProvider(MappingProvider newMappingProvider) {
        return Configuration.builder().jsonProvider(jsonProvider).mappingProvider(newMappingProvider).options(options).evaluationListener(evaluationListeners).build();
    }

    /**
     * Returns {@link com.jayway.jsonpath.spi.mapper.MappingProvider} used by this configuration
     * @return mappingProvider used
     */
    public MappingProvider mappingProvider() {
        return mappingProvider;
    }

    /**
     * Creates a new configuration by adding the new options to the options used in this configuration.
     * @param options options to add
     * @return a new configuration
     */
    public Configuration addOptions(Option... options) {
        EnumSet<Option> opts = EnumSet.noneOf(Option.class);
        opts.addAll(this.options);
        opts.addAll(asList(options));
        return Configuration.builder().jsonProvider(jsonProvider).mappingProvider(mappingProvider).options(opts).evaluationListener(evaluationListeners).build();
    }

    /**
     * Creates a new configuration with the provided options. Options in this configuration are discarded.
     * @param options
     * @return the new configuration instance
     */
    public Configuration setOptions(Option... options) {
        return Configuration.builder().jsonProvider(jsonProvider).mappingProvider(mappingProvider).options(options).evaluationListener(evaluationListeners).build();
    }

    /**
     * Returns the options used by this configuration
     * @return the new configuration instance
     */
    public Set<Option> getOptions() {
        return options;
    }

    /**
     * Check if this configuration contains the given option
     * @param option option to check
     * @return true if configurations contains option
     */
    public boolean containsOption(Option option){
        return options.contains(option);
    }

    /**
     * Creates a new configuration based on default values
     * @return a new configuration based on defaults
     */
    public static Configuration defaultConfiguration() {
        Defaults defaults = getEffectiveDefaults();
        return Configuration.builder().jsonProvider(defaults.jsonProvider()).options(defaults.options()).build();
    }

    /**
     * Returns a new ConfigurationBuilder
     * @return a builder
     */
    public static ConfigurationBuilder builder() {
        return new ConfigurationBuilder();
    }

    /**
     * Configuration builder
     */
    public static class ConfigurationBuilder {

        private JsonProvider jsonProvider;
        private MappingProvider mappingProvider;
        private EnumSet<Option> options = EnumSet.noneOf(Option.class);
        private Collection<EvaluationListener> evaluationListener = new ArrayList<EvaluationListener>();

        public ConfigurationBuilder jsonProvider(JsonProvider provider) {
            this.jsonProvider = provider;
            return this;
        }

        public ConfigurationBuilder mappingProvider(MappingProvider provider) {
            this.mappingProvider = provider;
            return this;
        }

        public ConfigurationBuilder options(Option... flags) {
            if(flags.length > 0) {
                this.options.addAll(asList(flags));
            }
            return this;
        }

        public ConfigurationBuilder options(Set<Option> options) {
            this.options.addAll(options);
            return this;
        }

        public ConfigurationBuilder evaluationListener(EvaluationListener... listener){
            this.evaluationListener = Arrays.asList(listener);
            return this;
        }

        public ConfigurationBuilder evaluationListener(Collection<EvaluationListener> listeners){
            this.evaluationListener = listeners == null ? Collections.<EvaluationListener>emptyList() : listeners;
            return this;
        }

        public Configuration build() {
            if (jsonProvider == null || mappingProvider == null) {
                final Defaults defaults = getEffectiveDefaults();
                if (jsonProvider == null) {
                    jsonProvider = defaults.jsonProvider();
                }
                if (mappingProvider == null){
                    mappingProvider = defaults.mappingProvider();
                }
            }
            return new Configuration(jsonProvider, mappingProvider, options, evaluationListener);
        }
    }

    public interface Defaults {
        /**
         * Returns the default {@link com.jayway.jsonpath.spi.json.JsonProvider}
         * @return default json provider
         */
        JsonProvider jsonProvider();

        /**
         * Returns default setOptions
         * @return setOptions
         */
        Set<Option> options();

        /**
         * Returns the default {@link com.jayway.jsonpath.spi.mapper.MappingProvider}
         *
         * @return default mapping provider
         */
        MappingProvider mappingProvider();

    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Configuration that = (Configuration) o;
        return jsonProvider.getClass() == that.jsonProvider.getClass() &&
                mappingProvider.getClass() == that.mappingProvider.getClass() &&
                Objects.equals(options, that.options);
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/Criteria.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

import com.jayway.jsonpath.internal.Path;
import com.jayway.jsonpath.internal.Utils;
import com.jayway.jsonpath.internal.filter.RelationalExpressionNode;
import com.jayway.jsonpath.internal.filter.RelationalOperator;
import com.jayway.jsonpath.internal.filter.ValueNode;
import com.jayway.jsonpath.internal.filter.ValueNodes;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern;

import static com.jayway.jsonpath.internal.Utils.notNull;
import static com.jayway.jsonpath.internal.filter.ValueNodes.PredicateNode;
import static com.jayway.jsonpath.internal.filter.ValueNodes.ValueListNode;

/**
 *
 */
@SuppressWarnings("unchecked")
public class Criteria implements Predicate {

    private final List<Criteria> criteriaChain;
    private ValueNode left;
    private RelationalOperator criteriaType;
    private ValueNode right;

    private Criteria(List<Criteria> criteriaChain, ValueNode left) {
        this.left = left;
        this.criteriaChain = criteriaChain;
        this.criteriaChain.add(this);
    }

    private Criteria(ValueNode left) {
        this(new LinkedList<Criteria>(), left);
    }

    @Override
    public boolean apply(PredicateContext ctx) {
        for (RelationalExpressionNode expressionNode : toRelationalExpressionNodes()) {
            if(!expressionNode.apply(ctx)){
                return false;
            }
        }
        return true;
    }

    @Override
    public String toString() {
        return Utils.join(" && ", toRelationalExpressionNodes());
    }

    private Collection<RelationalExpressionNode> toRelationalExpressionNodes(){
        List<RelationalExpressionNode> nodes = new ArrayList<RelationalExpressionNode>(criteriaChain.size());
        for (Criteria criteria : criteriaChain) {
            nodes.add(new RelationalExpressionNode(criteria.left, criteria.criteriaType, criteria.right));
        }
        return nodes;
    }

    /**
     * Static factory method to create a Criteria using the provided key
     *
     * @param key filed name
     * @return the new criteria
     */
    @Deprecated
    //This should be private.It exposes internal classes
    public static Criteria where(Path key) {
        return new Criteria(ValueNode.createPathNode(key));
    }


    /**
     * Static factory method to create a Criteria using the provided key
     *
     * @param key filed name
     * @return the new criteria
     */

    public static Criteria where(String key) {
        return new Criteria(ValueNode.toValueNode(prefixPath(key)));
    }

    /**
     * Static factory method to create a Criteria using the provided key
     *
     * @param key ads new filed to criteria
     * @return the criteria builder
     */
    public Criteria and(String key) {
        checkComplete();
        return new Criteria(this.criteriaChain, ValueNode.toValueNode(prefixPath(key)));
    }

    /**
     * Creates a criterion using equality
     *
     * @param o
     * @return the criteria
     */
    public Criteria is(Object o) {
        this.criteriaType = RelationalOperator.EQ;
        this.right = ValueNode.toValueNode(o);
        return this;
    }

    /**
     * Creates a criterion using equality
     *
     * @param o
     * @return the criteria
     */
    public Criteria eq(Object o) {
        return is(o);
    }

    /**
     * Creates a criterion using the <b>!=</b> operator
     *
     * @param o
     * @return the criteria
     */
    public Criteria ne(Object o) {
        this.criteriaType = RelationalOperator.NE;
        this.right = ValueNode.toValueNode(o);
        return this;
    }

    /**
     * Creates a criterion using the <b>&lt;</b> operator
     *
     * @param o
     * @return the criteria
     */
    public Criteria lt(Object o) {
        this.criteriaType = RelationalOperator.LT;
        this.right = ValueNode.toValueNode(o);
        return this;
    }

    /**
     * Creates a criterion using the <b>&lt;=</b> operator
     *
     * @param o
     * @return the criteria
     */
    public Criteria lte(Object o) {
        this.criteriaType = RelationalOperator.LTE;
        this.right = ValueNode.toValueNode(o);
        return this;
    }

    /**
     * Creates a criterion using the <b>&gt;</b> operator
     *
     * @param o
     * @return the criteria
     */
    public Criteria gt(Object o) {
        this.criteriaType = RelationalOperator.GT;
        this.right = ValueNode.toValueNode(o);
        return this;
    }

    /**
     * Creates a criterion using the <b>&gt;=</b> operator
     *
     * @param o
     * @return the criteria
     */
    public Criteria gte(Object o) {
        this.criteriaType = RelationalOperator.GTE;
        this.right = ValueNode.toValueNode(o);
        return this;
    }

    /**
     * Creates a criterion using a Regex
     *
     * @param pattern
     * @return the criteria
     */
    public Criteria regex(Pattern pattern) {
        notNull(pattern, "pattern can not be null");
        this.criteriaType = RelationalOperator.REGEX;
        this.right = ValueNode.toValueNode(pattern);
        return this;
    }

    /**
     * The <code>in</code> operator is analogous to the SQL IN modifier, allowing you
     * to specify an array of possible matches.
     *
     * @param o the values to match against
     * @return the criteria
     */
    public Criteria in(Object... o) {
        return in(Arrays.asList(o));
    }

    /**
     * The <code>in</code> operator is analogous to the SQL IN modifier, allowing you
     * to specify an array of possible matches.
     *
     * @param c the collection containing the values to match against
     * @return the criteria
     */
    public Criteria in(Collection<?> c) {
        notNull(c, "collection can not be null");
        this.criteriaType = RelationalOperator.IN;
        this.right = new ValueListNode(c);
        return this;
    }

    /**
     * The <code>contains</code> operator asserts that the provided object is contained
     * in the result. The object that should contain the input can be either an object or a String.
     *
     * @param o that should exists in given collection or
     * @return the criteria
     */
    public Criteria contains(Object o) {
        this.criteriaType = RelationalOperator.CONTAINS;
        this.right = ValueNode.toValueNode(o);
        return this;
    }

    /**
     * The <code>nin</code> operator is similar to $in except that it selects objects for
     * which the specified field does not have any value in the specified array.
     *
     * @param o the values to match against
     * @return the criteria
     */
    public Criteria nin(Object... o) {
        return nin(Arrays.asList(o));
    }

    /**
     * The <code>nin</code> operator is similar to $in except that it selects objects for
     * which the specified field does not have any value in the specified array.
     *
     * @param c the values to match against
     * @return the criteria
     */
    public Criteria nin(Collection<?> c) {
        notNull(c, "collection can not be null");
        this.criteriaType = RelationalOperator.NIN;
        this.right = new ValueListNode(c);
        return this;
    }

    /**
     * The <code>subsetof</code> operator selects objects for which the specified field is
     * an array whose elements comprise a subset of the set comprised by the elements of
     * the specified array.
     *
     * @param o the values to match against
     * @return the criteria
     */
    public Criteria subsetof(Object... o) {
        return subsetof(Arrays.asList(o));
    }

    /**
     * The <code>subsetof</code> operator selects objects for which the specified field is
     * an array whose elements comprise a subset of the set comprised by the elements of
     * the specified array.
     *
     * @param c the values to match against
     * @return the criteria
     */
    public Criteria subsetof(Collection<?> c) {
        notNull(c, "collection can not be null");
        this.criteriaType = RelationalOperator.SUBSETOF;
        this.right = new ValueListNode(c);
        return this;
    }

    /**
     * The <code>anyof</code> operator selects objects for which the specified field is
     * an array that contain at least an element in the specified array.
     *
     * @param o the values to match against
     * @return the criteria
     */
    public Criteria anyof(Object... o) {
        return subsetof(Arrays.asList(o));
    }

    /**
     * The <code>anyof</code> operator selects objects for which the specified field is
     * an array that contain at least an element in the specified array.
     *
     * @param c the values to match against
     * @return the criteria
     */
    public Criteria anyof(Collection<?> c) {
        notNull(c, "collection can not be null");
        this.criteriaType = RelationalOperator.ANYOF;
        this.right = new ValueListNode(c);
        return this;
    }

    /**
     * The <code>noneof</code> operator selects objects for which the specified field is
     * an array that does not contain any of the elements of the specified array.
     *
     * @param o the values to match against
     * @return the criteria
     */
    public Criteria noneof(Object... o) {
        return noneof(Arrays.asList(o));
    }

    /**
     * The <code>noneof</code> operator selects objects for which the specified field is
     * an array that does not contain any of the elements of the specified array.
     *
     * @param c the values to match against
     * @return the criteria
     */
    public Criteria noneof(Collection<?> c) {
        notNull(c, "collection can not be null");
        this.criteriaType = RelationalOperator.NONEOF;
        this.right = new ValueListNode(c);
        return this;
    }

    /**
     * The <code>all</code> operator is similar to $in, but instead of matching any value
     * in the specified array all values in the array must be matched.
     *
     * @param o
     * @return the criteria
     */
    public Criteria all(Object... o) {
        return all(Arrays.asList(o));
    }

    /**
     * The <code>all</code> operator is similar to $in, but instead of matching any value
     * in the specified array all values in the array must be matched.
     *
     * @param c
     * @return the criteria
     */
    public Criteria all(Collection<?> c) {
        notNull(c, "collection can not be null");
        this.criteriaType = RelationalOperator.ALL;
        this.right = new ValueListNode(c);
        return this;
    }

    /**
     * The <code>size</code> operator matches:
     * <p/>
     * <ol>
     * <li>array with the specified number of elements.</li>
     * <li>string with given length.</li>
     * </ol>
     *
     * @param size
     * @return the criteria
     */
    public Criteria size(int size) {
        this.criteriaType = RelationalOperator.SIZE;
        this.right = ValueNode.toValueNode(size);
        return this;
    }

    /**
     * The $type operator matches values based on their Java JSON type.
     *
     * Supported types are:
     *
     *  List.class
     *  Map.class
     *  String.class
     *  Number.class
     *  Boolean.class
     *
     * Other types evaluates to false
     *
     * @param clazz
     * @return the criteria
     */
    public Criteria type(Class<?> clazz) {
        this.criteriaType = RelationalOperator.TYPE;
        this.right = ValueNode.createClassNode(clazz);
        return this;
    }

    /**
     * Check for existence (or lack thereof) of a field.
     *
     * @param shouldExist
     * @return the criteria
     */
    public Criteria exists(boolean shouldExist) {
        this.criteriaType = RelationalOperator.EXISTS;
        this.right = ValueNode.toValueNode(shouldExist);
        this.left = left.asPathNode().asExistsCheck(shouldExist);
        return this;
    }

    /**
     * The <code>notEmpty</code> operator checks that an array or String is not empty.
     *
     * @return the criteria
     */
    @Deprecated
    public Criteria notEmpty() {
        return empty(false);
    }

    /**
     * The <code>notEmpty</code> operator checks that an array or String is empty.
     *
     * @param empty should be empty
     * @return the criteria
     */
    public Criteria empty(boolean empty) {
        this.criteriaType = RelationalOperator.EMPTY;
        this.right = empty ? ValueNodes.TRUE : ValueNodes.FALSE;
        return this;
    }

    /**
     * The <code>matches</code> operator checks that an object matches the given predicate.
     *
     * @param p
     * @return the criteria
     */
    public Criteria matches(Predicate p) {
        this.criteriaType = RelationalOperator.MATCHES;
        this.right = new PredicateNode(p);
        return this;
    }

    /**
     * Parse the provided criteria
     *
     * Deprecated use {@link Filter#parse(String)}
     *
     * @param criteria
     * @return a criteria
     */
    @Deprecated
    public static Criteria parse(String criteria) {
        if(criteria == null){
            throw new InvalidPathException("Criteria can not be null");
        }
        String[] split = criteria.trim().split(" ");
        if(split.length == 3){
            return create(split[0], split[1], split[2]);
        } else if(split.length == 1){
            return create(split[0], "EXISTS", "true");
        } else {
            throw new InvalidPathException("Could not parse criteria");
        }
    }

    /**
     * Creates a new criteria
     * @param left path to evaluate in criteria
     * @param operator operator
     * @param right expected value
     * @return a new Criteria
     */
    @Deprecated
    public static Criteria create(String left, String operator, String right) {
        Criteria criteria = new Criteria(ValueNode.toValueNode(left));
        criteria.criteriaType = RelationalOperator.fromString(operator);
        criteria.right = ValueNode.toValueNode(right);
        return criteria;
    }


    private static String prefixPath(String key){
        if (!key.startsWith("$") && !key.startsWith("@")) {
            key = "@." + key;
        }
        return key;
    }

    private void checkComplete(){
        boolean complete = (left != null && criteriaType != null && right != null);
        if(!complete){
            throw new JsonPathException("Criteria build exception. Complete on criteria before defining next.");
        }
    }

}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/DocumentContext.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

public interface DocumentContext extends ReadContext, WriteContext {
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/EvaluationListener.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

/**
 * A listener that can be registered on a {@link com.jayway.jsonpath.Configuration} that is notified when a
 * result is added to the result of this path evaluation.
 */
public interface EvaluationListener {

    /**
     * Callback invoked when result is found
     * @param found the found result
     * @return continuation instruction
     */
    EvaluationContinuation resultFound(FoundResult found);

    enum EvaluationContinuation {
        /**
         * Evaluation continues
         */
        CONTINUE,
        /**
         * Current result is included but no further evaluation will be performed.
         */
        ABORT
    }

    /**
     *
     */
    interface FoundResult {
        /**
         * the index of this result. First result i 0
         * @return index
         */
        int index();

        /**
         * The path of this result
         * @return path
         */
        String path();

        /**
         * The result object
         * @return the result object
         */
        Object result();
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/Filter.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

import com.jayway.jsonpath.internal.filter.FilterCompiler;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import static java.util.Arrays.asList;

/**
 *
 */
public abstract class Filter implements Predicate {

    /**
     * Creates a new Filter based on given criteria
     * @param predicate criteria
     * @return a new Filter
     */
    public static Filter filter(Predicate predicate) {
        return new SingleFilter(predicate);
    }

    /**
     * Create a new Filter based on given list of criteria.
     * @param predicates list of criteria all needs to evaluate to true
     * @return the filter
     */
    public static Filter filter(Collection<Predicate> predicates) {
        return new AndFilter(predicates);
    }

    @Override
    public abstract boolean apply(PredicateContext ctx);


    public Filter or(final Predicate other){
        return new OrFilter(this, other);
    }

    public Filter and(final Predicate other){
        return new AndFilter(this, other);
    }

    /**
     * Parses a filter. The filter must match <code>[?(<filter>)]</code>, white spaces are ignored.
     * @param filter filter string to parse
     * @return the filter
     */
    public static Filter parse(String filter){
        return FilterCompiler.compile(filter);
    }

    private static final class SingleFilter extends Filter {

        private final Predicate predicate;

        private SingleFilter(Predicate predicate) {
            this.predicate = predicate;
        }

        @Override
        public boolean apply(PredicateContext ctx) {
            return predicate.apply(ctx);
        }

        @Override
        public String toString() {
            String predicateString = predicate.toString();
            if(predicateString.startsWith("(")){
                return "[?" + predicateString + "]";
            } else {
                return "[?(" + predicateString + ")]";
            }
        }
    }

    private static final class AndFilter extends Filter {

        private final Collection<Predicate> predicates;

        private AndFilter(Collection<Predicate> predicates) {
            this.predicates = predicates;
        }

        private AndFilter(Predicate left, Predicate right) {
            this(asList(left, right));
        }

        public Filter and(final Predicate other){
            Collection<Predicate> newPredicates = new ArrayList<Predicate>(predicates);
            newPredicates.add(other);
            return new AndFilter(newPredicates);
        }

        @Override
        public boolean apply(PredicateContext ctx) {
            for (Predicate predicate : predicates) {
                if(!predicate.apply(ctx)){
                    return false;
                }
            }
            return true;
        }

        @Override
        public String toString() {
            Iterator<Predicate> i = predicates.iterator();
            StringBuilder sb = new StringBuilder();
            sb.append("[?(");
            while (i.hasNext()){
                String p = i.next().toString();

                if(p.startsWith("[?(")){
                    p = p.substring(3, p.length() - 2);
                }
                sb.append(p);

                if(i.hasNext()){
                    sb.append(" && ");
                }
            }
            sb.append(")]");
            return sb.toString();
        }
    }

    private static final class OrFilter extends Filter {

        private final Predicate left;
        private final Predicate right;
  
        private OrFilter(Predicate left, Predicate right) {
            this.left = left;
            this.right = right;
        }

        public Filter and(final Predicate other){
            return new OrFilter(left, new AndFilter(right, other));
        }

        @Override
        public boolean apply(PredicateContext ctx) {
            boolean a = left.apply(ctx);
            return a || right.apply(ctx);
        }

        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append("[?(");

            String l = left.toString();
            String r = right.toString();

            if(l.startsWith("[?(")){
                l = l.substring(3, l.length() - 2);
            }
            if(r.startsWith("[?(")){
                r = r.substring(3, r.length() - 2);
            }

            sb.append(l).append(" || ").append(r);

            sb.append(")]");
            return sb.toString();
        }
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/InvalidCriteriaException.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

@SuppressWarnings("serial")
public class InvalidCriteriaException extends JsonPathException {
    public InvalidCriteriaException() {
    }

    public InvalidCriteriaException(String message) {
        super(message);
    }

    public InvalidCriteriaException(String message, Throwable cause) {
        super(message, cause);
    }

    public InvalidCriteriaException(Throwable cause) {
        super(cause);
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/InvalidJsonException.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

@SuppressWarnings("serial")
public class InvalidJsonException extends JsonPathException {

    /**
     * Problematic JSON if available.
     */
    private final String json;
    
    public InvalidJsonException() {
        json = null;
    }

    public InvalidJsonException(String message) {
        super(message);
        json = null;
    }

    public InvalidJsonException(String message, Throwable cause) {
        super(message, cause);
        json = null;
    }

    public InvalidJsonException(Throwable cause) {
        super(cause);
        json = null;
    }
    
    /**
     * Rethrow the exception with the problematic JSON captured.
     */
    public InvalidJsonException(final Throwable cause, final String json) {
        super(cause);
        this.json = json;
    }
    
    /**
     * @return the problematic JSON if available.
     */
    public String getJson() {
        return json;
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/InvalidModificationException.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

public class InvalidModificationException extends JsonPathException {
    public InvalidModificationException(String message) {
        super(message);
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/InvalidPathException.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

@SuppressWarnings("serial")
public class InvalidPathException extends JsonPathException {

    public InvalidPathException() {
    }

    public InvalidPathException(String message) {
        super(message);
    }

    public InvalidPathException(String message, Throwable cause) {
        super(message, cause);
    }

    public InvalidPathException(Throwable cause) {
        super(cause);
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/JsonPath.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;


import com.jayway.jsonpath.internal.*;
import com.jayway.jsonpath.internal.path.PathCompiler;
import com.jayway.jsonpath.spi.json.JsonProvider;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import static com.jayway.jsonpath.Option.ALWAYS_RETURN_LIST;
import static com.jayway.jsonpath.Option.AS_PATH_LIST;
import static com.jayway.jsonpath.internal.Utils.*;

/**
 * <p/>
 * JsonPath is to JSON what XPATH is to XML, a simple way to extract parts of a given document. JsonPath is
 * available in many programming languages such as Javascript, Python and PHP.
 * <p/>
 * JsonPath allows you to compile a json path string to use it many times or to compile and apply in one
 * single on demand operation.
 * <p/>
 * Given the Json document:
 * <p/>
 * <pre>
 * String json =
 * "{
 * "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
 * }
 * ],
 * "bicycle":
 * {
 * "color": "red",
 * "price": 19.95
 * }
 * }
 * }";
 * </pre>
 * <p/>
 * A JsonPath can be compiled and used as shown:
 * <p/>
 * <code>
 * JsonPath path = JsonPath.compile("$.store.book[1]");
 * <br/>
 * List&lt;Object&gt; books = path.read(json);
 * </code>
 * </p>
 * Or:
 * <p/>
 * <code>
 * List&lt;Object&gt; authors = JsonPath.read(json, "$.store.book[*].author")
 * </code>
 * <p/>
 * If the json path returns a single value (is definite):
 * </p>
 * <code>
 * String author = JsonPath.read(json, "$.store.book[1].author")
 * </code>
 */
public class JsonPath {

    private final Path path;

    private JsonPath(String jsonPath, Predicate[] filters) {
        notNull(jsonPath, "path can not be null");
        this.path = PathCompiler.compile(jsonPath, filters);
    }

    /**
     * Returns the string representation of this JsonPath
     *
     * @return path as String
     */
    public String getPath() {
        return this.path.toString();
    }

    /**
     * @see JsonPath#isDefinite()
     */
    public static boolean isPathDefinite(String path) {
        return compile(path).isDefinite();
    }


    /**
     * Checks if a path points to a single item or if it potentially returns multiple items
     * <p/>
     * a path is considered <strong>not</strong> definite if it contains a scan fragment ".."
     * or an array position fragment that is not based on a single index
     * <p/>
     * <p/>
     * definite path examples are:
     * <p/>
     * $store.book
     * $store.book[1].title
     * <p/>
     * not definite path examples are:
     * <p/>
     * $..book
     * $.store.book[*]
     * $.store.book[1,2]
     * $.store.book[?(@.category = 'fiction')]
     *
     * @return true if path is definite (points to single item)
     */
    public boolean isDefinite() {
        return path.isDefinite();
    }

    /**
     * Applies this JsonPath to the provided json document.
     * Note that the document must be identified as either a List or Map by
     * the {@link JsonProvider}
     *
     * @param jsonObject a container Object
     * @param <T>        expected return type
     * @return object(s) matched by the given path
     */
    @SuppressWarnings({"unchecked"})
    public <T> T read(Object jsonObject) {
        return read(jsonObject, Configuration.defaultConfiguration());
    }

    /**
     * Applies this JsonPath to the provided json document.
     * Note that the document must be identified as either a List or Map by
     * the {@link JsonProvider}
     *
     * @param jsonObject    a container Object
     * @param configuration configuration to use
     * @param <T>           expected return type
     * @return object(s) matched by the given path
     */
    @SuppressWarnings("unchecked")
    public <T> T read(Object jsonObject, Configuration configuration) {
        boolean optAsPathList = configuration.containsOption(AS_PATH_LIST);
        boolean optAlwaysReturnList = configuration.containsOption(Option.ALWAYS_RETURN_LIST);
        boolean optSuppressExceptions = configuration.containsOption(Option.SUPPRESS_EXCEPTIONS);

        if (path.isFunctionPath()) {
            if (optAsPathList || optAlwaysReturnList) {
                if (optSuppressExceptions) {
                    return (T) (path.isDefinite() ? null : configuration.jsonProvider().createArray());
                }
                throw new JsonPathException("Options " + AS_PATH_LIST + " and " + ALWAYS_RETURN_LIST + " are not allowed when using path functions!");
            }
            EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration);
            if (optSuppressExceptions && evaluationContext.getPathList().isEmpty()) {
                return (T) (path.isDefinite() ? null : configuration.jsonProvider().createArray());
            }
            return evaluationContext.getValue(true);
        } else if (optAsPathList) {
            EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration);
            if (optSuppressExceptions && evaluationContext.getPathList().isEmpty()) {
                return (T) configuration.jsonProvider().createArray();
            }
            return (T) evaluationContext.getPath();
        } else {
            EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration);
            if (optSuppressExceptions && evaluationContext.getPathList().isEmpty()) {
                if (optAlwaysReturnList) {
                    return (T) configuration.jsonProvider().createArray();
                } else {
                    return (T) (path.isDefinite() ? null : configuration.jsonProvider().createArray());
                }
            }
            Object res = evaluationContext.getValue(false);
            if (optAlwaysReturnList && path.isDefinite()) {
                Object array = configuration.jsonProvider().createArray();
                configuration.jsonProvider().setArrayIndex(array, 0, res);
                return (T) array;
            } else {
                return (T) res;
            }
        }
    }

    /**
     * Set the value this path points to in the provided jsonObject
     *
     * @param jsonObject    a json object
     * @param configuration configuration to use
     * @param <T>           expected return type
     * @return the updated jsonObject or the path list to updated objects if option AS_PATH_LIST is set.
     */
    public <T> T set(Object jsonObject, Object newVal, Configuration configuration) {
        notNull(jsonObject, "json can not be null");
        notNull(configuration, "configuration can not be null");
        EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration, true);
        if (evaluationContext.getPathList().isEmpty()) {
            boolean optSuppressExceptions = configuration.containsOption(Option.SUPPRESS_EXCEPTIONS);
            if (optSuppressExceptions) {
                return handleMissingPathInContext(configuration);
            } else {
                throw new PathNotFoundException();
            }
        }
        for (PathRef updateOperation : evaluationContext.updateOperations()) {
            updateOperation.set(newVal, configuration);
        }
        return resultByConfiguration(jsonObject, configuration, evaluationContext);
    }


    /**
     * Replaces the value on the given path with the result of the {@link MapFunction}.
     *
     * @param jsonObject    a json object
     * @param mapFunction   Converter object to be invoked
     * @param configuration configuration to use
     * @return the updated jsonObject or the path list to updated objects if option AS_PATH_LIST is set.
     */
    public <T> T map(Object jsonObject, MapFunction mapFunction, Configuration configuration) {
        notNull(jsonObject, "json can not be null");
        notNull(configuration, "configuration can not be null");
        notNull(mapFunction, "mapFunction can not be null");
        EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration, true);
        if (evaluationContext.getPathList().isEmpty()) {
            boolean optSuppressExceptions = configuration.containsOption(Option.SUPPRESS_EXCEPTIONS);
            if (optSuppressExceptions) {
                return handleMissingPathInContext(configuration);
            } else {
                throw new PathNotFoundException();
            }
        }
        for (PathRef updateOperation : evaluationContext.updateOperations()) {
            updateOperation.convert(mapFunction, configuration);
        }
        return resultByConfiguration(jsonObject, configuration, evaluationContext);

    }

    /**
     * Deletes the object this path points to in the provided jsonObject
     *
     * @param jsonObject    a json object
     * @param configuration configuration to use
     * @param <T>           expected return type
     * @return the updated jsonObject or the path list to deleted objects if option AS_PATH_LIST is set.
     */
    public <T> T delete(Object jsonObject, Configuration configuration) {
        notNull(jsonObject, "json can not be null");
        notNull(configuration, "configuration can not be null");
        EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration, true);
        if (evaluationContext.getPathList().isEmpty()) {
            boolean optSuppressExceptions = configuration.containsOption(Option.SUPPRESS_EXCEPTIONS);
            if (optSuppressExceptions) {
                return handleMissingPathInContext(configuration);
            } else {
                throw new PathNotFoundException();
            }
        }
        for (PathRef updateOperation : evaluationContext.updateOperations()) {
            updateOperation.delete(configuration);
        }
        return resultByConfiguration(jsonObject, configuration, evaluationContext);
    }

    /**
     * Adds a new value to the Array this path points to in the provided jsonObject
     *
     * @param jsonObject    a json object
     * @param value         the value to add
     * @param configuration configuration to use
     * @param <T>           expected return type
     * @return the updated jsonObject or the path list to updated object if option AS_PATH_LIST is set.
     */
    public <T> T add(Object jsonObject, Object value, Configuration configuration) {
        notNull(jsonObject, "json can not be null");
        notNull(configuration, "configuration can not be null");
        EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration, true);
        if (evaluationContext.getPathList().isEmpty()) {
            boolean optSuppressExceptions = configuration.containsOption(Option.SUPPRESS_EXCEPTIONS);
            if (optSuppressExceptions) {
                return handleMissingPathInContext(configuration);
            } else {
                throw new PathNotFoundException();
            }
        }
        for (PathRef updateOperation : evaluationContext.updateOperations()) {
            updateOperation.add(value, configuration);
        }
        return resultByConfiguration(jsonObject, configuration, evaluationContext);
    }

    /**
     * Adds or updates the Object this path points to in the provided jsonObject with a key with a value
     *
     * @param jsonObject    a json object
     * @param key           the key to add or update
     * @param value         the new value
     * @param configuration configuration to use
     * @param <T>           expected return type
     * @return the updated jsonObject or the path list to updated objects if option AS_PATH_LIST is set.
     */
    public <T> T put(Object jsonObject, String key, Object value, Configuration configuration) {
        notNull(jsonObject, "json can not be null");
        notEmpty(key, "key can not be null or empty");
        notNull(configuration, "configuration can not be null");
        EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration, true);
        if (evaluationContext.getPathList().isEmpty()) {
            boolean optSuppressExceptions = configuration.containsOption(Option.SUPPRESS_EXCEPTIONS);
            if (optSuppressExceptions) {
                return handleMissingPathInContext(configuration);
            } else {
                throw new PathNotFoundException();
            }
        }
        for (PathRef updateOperation : evaluationContext.updateOperations()) {
            updateOperation.put(key, value, configuration);
        }
        return resultByConfiguration(jsonObject, configuration, evaluationContext);
    }

    public <T> T renameKey(Object jsonObject, String oldKeyName, String newKeyName, Configuration configuration) {
        notNull(jsonObject, "json can not be null");
        notEmpty(newKeyName, "newKeyName can not be null or empty");
        notNull(configuration, "configuration can not be null");
        EvaluationContext evaluationContext = path.evaluate(jsonObject, jsonObject, configuration, true);
        for (PathRef updateOperation : evaluationContext.updateOperations()) {
            boolean optSuppressExceptions = configuration.containsOption(Option.SUPPRESS_EXCEPTIONS);
            try {
                updateOperation.renameKey(oldKeyName, newKeyName, configuration);
            } catch (RuntimeException e) {
                if(!optSuppressExceptions){
                    throw e;
                }else{
                    // With option SUPPRESS_EXCEPTIONS,
                    // the PathNotFoundException should be ignored and the other updateOperation should be continued.
                }
            }
        }
        return resultByConfiguration(jsonObject, configuration, evaluationContext);
    }

    /**
     * Applies this JsonPath to the provided json string
     *
     * @param json a json string
     * @param <T>  expected return type
     * @return list of objects matched by the given path
     */
    @SuppressWarnings({"unchecked"})
    public <T> T read(String json) {
        return read(json, Configuration.defaultConfiguration());
    }

    /**
     * Applies this JsonPath to the provided json string
     *
     * @param json          a json string
     * @param configuration configuration to use
     * @param <T>           expected return type
     * @return list of objects matched by the given path
     */
    @SuppressWarnings({"unchecked"})
    public <T> T read(String json, Configuration configuration) {
        notEmpty(json, "json can not be null or empty");
        notNull(configuration, "jsonProvider can not be null");

        return read(configuration.jsonProvider().parse(json), configuration);
    }

    /**
     * Applies this JsonPath to the provided json URL
     *
     * @param jsonURL url to read from
     * @param <T>     expected return type
     * @return list of objects matched by the given path
     * @throws IOException
     */
    @SuppressWarnings({"unchecked"})
    public <T> T read(URL jsonURL) throws IOException {
        return read(jsonURL, Configuration.defaultConfiguration());
    }

    /**
     * Applies this JsonPath to the provided json file
     *
     * @param jsonFile file to read from
     * @param <T>      expected return type
     * @return list of objects matched by the given path
     * @throws IOException
     */
    @SuppressWarnings({"unchecked"})
    public <T> T read(File jsonFile) throws IOException {
        return read(jsonFile, Configuration.defaultConfiguration());
    }


    /**
     * Applies this JsonPath to the provided json file
     *
     * @param jsonFile      file to read from
     * @param configuration configuration to use
     * @param <T>           expected return type
     * @return list of objects matched by the given path
     * @throws IOException
     */
    @SuppressWarnings({"unchecked"})
    public <T> T read(File jsonFile, Configuration configuration) throws IOException {
        notNull(jsonFile, "json file can not be null");
        isTrue(jsonFile.exists(), "json file does not exist");
        notNull(configuration, "jsonProvider can not be null");

        FileInputStream fis = null;
        try {
            fis = new FileInputStream(jsonFile);
            return read(fis, configuration);
        } finally {
            Utils.closeQuietly(fis);
        }
    }

    /**
     * Applies this JsonPath to the provided json input stream
     *
     * @param jsonInputStream input stream to read from
     * @param <T>             expected return type
     * @return list of objects matched by the given path
     * @throws IOException
     */
    @SuppressWarnings({"unchecked"})
    public <T> T read(InputStream jsonInputStream) throws IOException {
        return read(jsonInputStream, Configuration.defaultConfiguration());
    }

    /**
     * Applies this JsonPath to the provided json input stream
     *
     * @param jsonInputStream input stream to read from
     * @param configuration   configuration to use
     * @param <T>             expected return type
     * @return list of objects matched by the given path
     * @throws IOException
     */
    @SuppressWarnings({"unchecked"})
    public <T> T read(InputStream jsonInputStream, Configuration configuration) throws IOException {
        notNull(jsonInputStream, "json input stream can not be null");
        notNull(configuration, "configuration can not be null");

        return read(jsonInputStream, "UTF-8", configuration);
    }

    /**
     * Applies this JsonPath to the provided json input stream
     *
     * @param jsonInputStream input stream to read from
     * @param configuration   configuration to use
     * @param <T>             expected return type
     * @return list of objects matched by the given path
     * @throws IOException
     */
    @SuppressWarnings({"unchecked"})
    public <T> T read(InputStream jsonInputStream, String charset, Configuration configuration) throws IOException {
        notNull(jsonInputStream, "json input stream can not be null");
        notNull(charset, "charset can not be null");
        notNull(configuration, "configuration can not be null");

        try {
            return read(configuration.jsonProvider().parse(jsonInputStream, charset), configuration);
        } finally {
            Utils.closeQuietly(jsonInputStream);
        }
    }

    // --------------------------------------------------------
    //
    // Static factory methods
    //
    // --------------------------------------------------------

    /**
     * Compiles a JsonPath
     *
     * @param jsonPath to compile
     * @param filters  filters to be applied to the filter place holders  [?] in the path
     * @return compiled JsonPath
     */
    public static JsonPath compile(String jsonPath, Predicate... filters) {
        notEmpty(jsonPath, "json can not be null or empty");

        return new JsonPath(jsonPath, filters);
    }


    // --------------------------------------------------------
    //
    // Static utility functions
    //
    // --------------------------------------------------------

    /**
     * Creates a new JsonPath and applies it to the provided Json object
     *
     * @param json     a json object
     * @param jsonPath the json path
     * @param filters  filters to be applied to the filter place holders  [?] in the path
     * @param <T>      expected return type
     * @return list of objects matched by the given path
     */
    @SuppressWarnings({"unchecked"})
    public static <T> T read(Object json, String jsonPath, Predicate... filters) {
        return parse(json).read(jsonPath, filters);
    }

    /**
     * Creates a new JsonPath and applies it to the provided Json string
     *
     * @param json     a json string
     * @param jsonPath the json path
     * @param filters  filters to be applied to the filter place holders  [?] in the path
     * @param <T>      expected return type
     * @return list of objects matched by the given path
     */
    @SuppressWarnings({"unchecked"})
    public static <T> T read(String json, String jsonPath, Predicate... filters) {
        return new ParseContextImpl().parse(json).read(jsonPath, filters);
    }


    /**
     * Creates a new JsonPath and applies it to the provided Json object
     *
     * @param jsonURL  url pointing to json doc
     * @param jsonPath the json path
     * @param filters  filters to be applied to the filter place holders  [?] in the path
     * @param <T>      expected return type
     * @return list of objects matched by the given path
     */
    @SuppressWarnings({"unchecked"})
    @Deprecated
    public static <T> T read(URL jsonURL, String jsonPath, Predicate... filters) throws IOException {
        return new ParseContextImpl().parse(jsonURL).read(jsonPath, filters);
    }

    /**
     * Creates a new JsonPath and applies it to the provided Json object
     *
     * @param jsonFile json file
     * @param jsonPath the json path
     * @param filters  filters to be applied to the filter place holders  [?] in the path
     * @param <T>      expected return type
     * @return list of objects matched by the given path
     */
    @SuppressWarnings({"unchecked"})
    public static <T> T read(File jsonFile, String jsonPath, Predicate... filters) throws IOException {
        return new ParseContextImpl().parse(jsonFile).read(jsonPath, filters);
    }

    /**
     * Creates a new JsonPath and applies it to the provided Json object
     *
     * @param jsonInputStream json input stream
     * @param jsonPath        the json path
     * @param filters         filters to be applied to the filter place holders  [?] in the path
     * @param <T>             expected return type
     * @return list of objects matched by the given path
     */
    @SuppressWarnings({"unchecked"})
    public static <T> T read(InputStream jsonInputStream, String jsonPath, Predicate... filters) throws IOException {
        return new ParseContextImpl().parse(jsonInputStream).read(jsonPath, filters);
    }


    // --------------------------------------------------------
    //
    // Static Fluent API
    //
    // --------------------------------------------------------


    /**
     * Creates a {@link ParseContext} that can be used to parse JSON input. The parse context
     * is as thread safe as the underlying {@link JsonProvider}. Note that not all JsonProvider are
     * thread safe.
     *
     * @param configuration configuration to use when parsing JSON
     * @return a parsing context based on given configuration
     */
    public static ParseContext using(Configuration configuration) {
        return new ParseContextImpl(configuration);
    }

    /**
     * Creates a {@link ParseContext} that will parse a given JSON input.
     *
     * @param provider jsonProvider to use when parsing JSON
     * @return a parsing context based on given jsonProvider
     */
    @Deprecated
    public static ParseContext using(JsonProvider provider) {
        return new ParseContextImpl(Configuration.builder().jsonProvider(provider).build());
    }

    /**
     * Parses the given JSON input using the default {@link Configuration} and
     * returns a {@link DocumentContext} for path evaluation
     *
     * @param json input
     * @return a read context
     */
    public static DocumentContext parse(Object json) {
        return new ParseContextImpl().parse(json);
    }

    /**
     * Parses the given JSON input using the default {@link Configuration} and
     * returns a {@link DocumentContext} for path evaluation
     *
     * @param json string
     * @return a read context
     */
    public static DocumentContext parse(String json) {
        return new ParseContextImpl().parse(json);
    }

    /**
     * Parses the given JSON input using the default {@link Configuration} and
     * returns a {@link DocumentContext} for path evaluation
     *
     * @param json stream
     * @return a read context
     */
    public static DocumentContext parse(InputStream json) {
        return new ParseContextImpl().parse(json);
    }

    /**
     * Parses the given JSON input using the default {@link Configuration} and
     * returns a {@link DocumentContext} for path evaluation
     *
     * @param json file
     * @return a read context
     */
    public static DocumentContext parse(File json) throws IOException {
        return new ParseContextImpl().parse(json);
    }

    /**
     * Parses the given JSON input using the default {@link Configuration} and
     * returns a {@link DocumentContext} for path evaluation
     *
     * @param json url
     * @return a read context
     */
    @Deprecated
    public static DocumentContext parse(URL json) throws IOException {
        return new ParseContextImpl().parse(json);
    }

    /**
     * Parses the given JSON input using the provided {@link Configuration} and
     * returns a {@link DocumentContext} for path evaluation
     *
     * @param json input
     * @return a read context
     */
    public static DocumentContext parse(Object json, Configuration configuration) {
        return new ParseContextImpl(configuration).parse(json);
    }

    /**
     * Parses the given JSON input using the provided {@link Configuration} and
     * returns a {@link DocumentContext} for path evaluation
     *
     * @param json input
     * @return a read context
     */
    public static DocumentContext parse(String json, Configuration configuration) {
        return new ParseContextImpl(configuration).parse(json);
    }

    /**
     * Parses the given JSON input using the provided {@link Configuration} and
     * returns a {@link DocumentContext} for path evaluation
     *
     * @param json input
     * @return a read context
     */
    public static DocumentContext parse(InputStream json, Configuration configuration) {
        return new ParseContextImpl(configuration).parse(json);
    }

    /**
     * Parses the given JSON input using the provided {@link Configuration} and
     * returns a {@link DocumentContext} for path evaluation
     *
     * @param json input
     * @return a read context
     */
    public static DocumentContext parse(File json, Configuration configuration) throws IOException {
        return new ParseContextImpl(configuration).parse(json);
    }

    /**
     * Parses the given JSON input using the provided {@link Configuration} and
     * returns a {@link DocumentContext} for path evaluation
     *
     * @param json input
     * @return a read context
     */
    @Deprecated
    public static DocumentContext parse(URL json, Configuration configuration) throws IOException {
        return new ParseContextImpl(configuration).parse(json);
    }

    private <T> T resultByConfiguration(Object jsonObject, Configuration configuration, EvaluationContext evaluationContext) {
        if(configuration.containsOption(AS_PATH_LIST)){
            return (T)evaluationContext.getPathList();
        } else {
            return (T) jsonObject;
        }
    }

    private <T> T handleMissingPathInContext(final Configuration configuration) {
        boolean optAsPathList = configuration.containsOption(AS_PATH_LIST);
        boolean optAlwaysReturnList = configuration.containsOption(Option.ALWAYS_RETURN_LIST);
        if (optAsPathList) {
            return (T) configuration.jsonProvider().createArray();
        } else {
            if (optAlwaysReturnList) {
                return (T) configuration.jsonProvider().createArray();
            } else {
                return (T) (path.isDefinite() ? null : configuration.jsonProvider().createArray());
            }
        }
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/JsonPathException.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

public class JsonPathException extends RuntimeException {

    public JsonPathException() {
    }

    public JsonPathException(String message) {
        super(message);
    }

    public JsonPathException(String message, Throwable cause) {
        super(message, cause);
    }

    public JsonPathException(Throwable cause) {
        super(cause);
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/MapFunction.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;


/**
 * Returns a new representation for the input value.
 */
public interface MapFunction {
    Object map(Object currentValue, Configuration configuration);
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/Option.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

public enum Option {

    /**
     * returns <code>null</code> for missing leaf.
     *
     * <pre>
     * [
     *      {
     *         "foo" : "foo1",
     *         "bar" : "bar1"
     *      }
     *      {
     *         "foo" : "foo2"
     *      }
     * ]
     *</pre>
     *
     * the path :
     *
     * "$[*].bar"
     *
     * Without flag ["bar1"] is returned
     * With flag ["bar1", null] is returned
     *
     *
     */
    DEFAULT_PATH_LEAF_TO_NULL,

    /**
     * Makes this implementation more compliant to the Goessner spec. All results are returned as Lists.
     */
    ALWAYS_RETURN_LIST,

    /**
     * Returns a list of path strings representing the path of the evaluation hits
     */
    AS_PATH_LIST,

    /**
     * Suppress all exceptions when evaluating path.
     * <br/>
     * If an exception is thrown and the option {@link Option#ALWAYS_RETURN_LIST} an empty list is returned.
     * If an exception is thrown and the option {@link Option#ALWAYS_RETURN_LIST} is not present null is returned.
     */
    SUPPRESS_EXCEPTIONS,

    /**
     * Configures JsonPath to require properties defined in path when an <bold>indefinite</bold> path is evaluated.
     *
     *
     * Given:
     *
     * <pre>
     * [
     *     {
     *         "a" : "a-val",
     *         "b" : "b-val"
     *     },
     *     {
     *         "a" : "a-val",
     *     }
     * ]
     * </pre>
     *
     * evaluating the path "$[*].b"
     *
     * If REQUIRE_PROPERTIES option is present PathNotFoundException is thrown.
     * If REQUIRE_PROPERTIES option is not present ["b-val"] is returned.
     */
    REQUIRE_PROPERTIES

}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/ParseContext.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;


/**
 * Parses JSON as specified by the used {@link com.jayway.jsonpath.spi.json.JsonProvider}.
 */
public interface ParseContext {

    DocumentContext parse(String json);

    DocumentContext parse(Object json);

    DocumentContext parse(InputStream json);

    DocumentContext parse(InputStream json, String charset);

    DocumentContext parse(File json) throws IOException;

    DocumentContext parseUtf8(byte[] json);

    @Deprecated
    DocumentContext parse(URL json) throws IOException;
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/PathNotFoundException.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

public class PathNotFoundException extends InvalidPathException {

    public PathNotFoundException() {
    }

    public PathNotFoundException(String message) {
        super(message);
    }

    public PathNotFoundException(String message, Throwable cause) {
        super(message, cause);
    }

    public PathNotFoundException(Throwable cause) {
        super(cause);
    }

    @Override
    public synchronized Throwable fillInStackTrace() {
        return this;
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/Predicate.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

import com.jayway.jsonpath.spi.mapper.MappingException;

/**
 *
 */
public interface Predicate {

    boolean apply(PredicateContext ctx);

    public interface PredicateContext {

        /**
         * Returns the current item being evaluated by this predicate
         * @return current document
         */
        Object item();

        /**
         * Returns the current item being evaluated by this predicate. It will be mapped
         * to the provided class
         * @return current document
         */
        <T> T item(Class<T> clazz) throws MappingException;

        /**
         * Returns the root document (the complete JSON)
         * @return root document
         */
        Object root();

        /**
         * Configuration to use when evaluating
         * @return configuration
         */
        Configuration configuration();
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/ReadContext.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

public interface ReadContext {

    /**
     * Returns the configuration used for reading
     *
     * @return an immutable configuration
     */
    Configuration configuration();

    /**
     * Returns the JSON model that this context is operating on
     *
     * @return json model
     */
    <T> T json();

    /**
     * Returns the JSON model that this context is operating on as a JSON string
     *
     * @return json model as string
     */
    String jsonString();

    /**
     * Reads the given path from this context
     *
     * @param path    path to read
     * @param filters filters
     * @param <T>
     * @return result
     */
    <T> T read(String path, Predicate... filters);

    /**
     * Reads the given path from this context
     *
     * @param path    path to read
     * @param type    expected return type (will try to map)
     * @param filters filters
     * @param <T>
     * @return result
     */
    <T> T read(String path, Class<T> type, Predicate... filters);

    /**
     * Reads the given path from this context
     *
     * @param path path to apply
     * @param <T>
     * @return result
     */
    <T> T read(JsonPath path);

    /**
     * Reads the given path from this context
     *
     * @param path path to apply
     * @param type    expected return type (will try to map)
     * @param <T>
     * @return result
     */
    <T> T read(JsonPath path, Class<T> type);

    /**
     * Reads the given path from this context
     *
     * Sample code to create a TypeRef
     * <code>
     *       TypeRef ref = new TypeRef<List<Integer>>() {};
     * </code>
     *
     * @param path path to apply
     * @param typeRef  expected return type (will try to map)
     * @param <T>
     * @return result
     */
    <T> T read(JsonPath path, TypeRef<T> typeRef);

    /**
     * Reads the given path from this context
     *
     * Sample code to create a TypeRef
     * <code>
     *       TypeRef ref = new TypeRef<List<Integer>>() {};
     * </code>
     *
     * @param path path to apply
     * @param typeRef  expected return type (will try to map)
     * @param <T>
     * @return result
     */
    <T> T read(String path, TypeRef<T> typeRef);

    /**
     * Stops evaluation when maxResults limit has been reached
     * @param maxResults
     * @return the read context
     */
    ReadContext limit(int maxResults);

    /**
     * Adds listener to the evaluation of this path
     * @param listener listeners to add
     * @return the read context
     */
    ReadContext withListeners(EvaluationListener... listener);

}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/TypeRef.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;


/**
 * Used to specify generic type information in {@link com.jayway.jsonpath.ReadContext}
 *
 * <code>
 *       TypeRef ref = new TypeRef<List<Integer>>() { };
 * </code>
 *
 * @param <T>
 */
public abstract class TypeRef<T> implements Comparable<TypeRef<T>> {
    protected final Type type;
    
    protected TypeRef()
    {
        Type superClass = getClass().getGenericSuperclass();
        if (superClass instanceof Class<?>) {
            throw new IllegalArgumentException("No type info in TypeRef");
        }
        type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
    }

    public Type getType() { return type; }
    
    /**
     * The only reason we define this method (and require implementation
     * of <code>Comparable</code>) is to prevent constructing a
     * reference without type information.
     */
    @Override
    public int compareTo(TypeRef<T> o) {
        return 0;
    }
}



================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/ValueCompareException.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

public class ValueCompareException extends JsonPathException {

    public ValueCompareException() {
    }

    /**
     * Construct the exception with message capturing the classes for two objects.
     *
     * @param left first object
     * @param right second object
     */
    public ValueCompareException(final Object left, final Object right) {
        super(String.format("Can not compare a %1s with a %2s", left.getClass().getName(), right.getClass().getName()));
    }

    public ValueCompareException(String message) {
        super(message);
    }

    public ValueCompareException(String message, Throwable cause) {
        super(message, cause);
    }

}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/WriteContext.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath;

public interface WriteContext {

    /**
     * Returns the configuration used for reading
     *
     * @return an immutable configuration
     */
    Configuration configuration();

    /**
     * Returns the JSON model that this context is operating on
     *
     * @return json model
     */
    <T> T json();

    /**
     * Returns the JSON model that this context is operating on as a JSON string
     *
     * @return json model as string
     */
    String jsonString();

    /**
     * Set the value a the given path
     *
     * @param path      path to set
     * @param newValue  new value
     * @param filters   filters
     * @return a document context
     */
    DocumentContext set(String path, Object newValue, Predicate... filters);

    /**
     * Set the value a the given path
     *
     * @param path      path to set
     * @param newValue  new value
     * @return a document context
     */
    DocumentContext set(JsonPath path, Object newValue);

    /**
     * Replaces the value on the given path with the result of the {@link MapFunction}.
     *
     * @param path           path to be converted set
     * @param mapFunction    Converter object to be invoked
     * @param filters        filters
     * @return a document context
     */
    DocumentContext map(String path, MapFunction mapFunction, Predicate... filters);

    /**
     * Replaces the value on the given path with the result of the {@link MapFunction}.
     *
     * @param path           path to be converted set
     * @param mapFunction    Converter object to be invoked (or lambda:))
     * @return a document context
     */
    DocumentContext map(JsonPath path, MapFunction mapFunction);

    /**
     * Deletes the given path
     *
     * @param path    path to delete
     * @param filters filters
     * @return a document context
     */
    DocumentContext delete(String path, Predicate... filters);

    /**
     * Deletes the given path
     *
     * @param path    path to delete
     * @return a document context
     */
    DocumentContext delete(JsonPath path);

    /**
     * Add value to array
     *
     * <pre>
     * <code>
     * List<Integer> array = new ArrayList<Integer>(){{
     *      add(0);
     *      add(1);
     * }};
     *
     * JsonPath.parse(array).add("$", 2);
     *
     * assertThat(array).containsExactly(0,1,2);
     * </code>
     * </pre>
     *
     * @param path    path to array
     * @param value   value to add
     * @param filters filters
     * @return a document context
     */
    DocumentContext add(String path, Object value, Predicate... filters);

    /**
     * Add value to array at the given path
     *
     * @param path    path to array
     * @param value   value to add
     * @return a document context
     */
    DocumentContext add(JsonPath path, Object value);

    /**
     * Add or update the key with a the given value at the given path
     *
     * @param path    path to object
     * @param key     key to add
     * @param value   value of key
     * @param filters filters
     * @return a document context
     */
    DocumentContext put(String path, String key, Object value, Predicate... filters);

    /**
     * Add or update the key with a the given value at the given path
     *
     * @param path    path to array
     * @param key     key to add
     * @param value   value of key
     * @return a document context
     */
    DocumentContext put(JsonPath path, String key, Object value);

    /**
     * Renames the last key element of a given path.
     * @param path          The path to the old key. Should be resolved to a map
     *                      or an array including map items.
     * @param oldKeyName    The old key name.
     * @param newKeyName    The new key name.
     * @param filters       filters.
     * @return a document content.
     */
    DocumentContext renameKey(String path, String oldKeyName, String newKeyName, Predicate... filters);

    /**
     * Renames the last key element of a given path.
     * @param path          The path to the old key. Should be resolved to a map
     *                      or an array including map items.
     * @param oldKeyName    The old key name.
     * @param newKeyName    The new key name.
     * @return a document content.
     */
    DocumentContext renameKey(JsonPath path, String oldKeyName, String newKeyName);
}

================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/internal/CharacterIndex.java
================================================
package com.jayway.jsonpath.internal;

import com.jayway.jsonpath.InvalidPathException;

public class CharacterIndex {

    private static final char OPEN_PARENTHESIS = '(';
    private static final char CLOSE_PARENTHESIS = ')';
    private static final char CLOSE_SQUARE_BRACKET = ']';
    private static final char SPACE = ' ';
    private static final char ESCAPE = '\\';
    private static final char SINGLE_QUOTE = '\'';
    private static final char DOUBLE_QUOTE = '"';
    private static final char MINUS = '-';
    private static final char PERIOD = '.';
    private static final char REGEX = '/';

    //workaround for issue: https://github.com/json-path/JsonPath/issues/590
    private static final char SCI_E = 'E';
    private static final char SCI_e = 'e';

    private final CharSequence charSequence;
    private int position;
    private int endPosition;

    public CharacterIndex(CharSequence charSequence) {
        this.charSequence = charSequence;
        this.position = 0;
        this.endPosition = charSequence.length() - 1;
    }

    public int length() {
        return endPosition + 1;
    }

    public char charAt(int idx) {
        return charSequence.charAt(idx);
    }

    public char currentChar() {
        return charSequence.charAt(position);
    }

    public boolean currentCharIs(char c) {
        return (charSequence.charAt(position) == c);
    }

    public boolean lastCharIs(char c) {
      return charSequence.charAt(endPosition) == c;
    }

    public boolean nextCharIs(char c) {
        return inBounds(position + 1) && (charSequence.charAt(position + 1) == c);
    }

    public int incrementPosition(int charCount) {
        return setPosition(position + charCount);
    }

    public int decrementEndPosition(int charCount) {
        return setEndPosition(endPosition - charCount);
    }

    public int setPosition(int newPosition) {
        //position = min(newPosition, charSequence.length() - 1);
        position = newPosition;
        return position;
    }

    private int setEndPosition(int newPosition) {
        endPosition = newPosition;
        return endPosition;
    }

    public int position(){
        return position;
    }

    public int indexOfClosingSquareBracket(int startPosition) {
        int readPosition = startPosition;
        while (inBounds(readPosition)) {
            if(charAt(readPosition) == CLOSE_SQUARE_BRACKET){
                return readPosition;
            }
            readPosition++;
        }
        return -1;
    }

    public int indexOfMatchingCloseChar(int startPosition, char openChar, char closeChar, boolean skipStrings, boolean skipRegex) {
        if(charAt(startPosition) != openChar){
            throw new InvalidPathException("Expected " + openChar + " but found " + charAt(startPosition));
        }

        int opened = 1;
        int readPosition = startPosition + 1;
        while (inBounds(readPosition)) {
            if (skipStrings) {
                char quoteChar = charAt(readPosition);
                if (quoteChar == SINGLE_QUOTE || quoteChar == DOUBLE_QUOTE){
                    readPosition = nextIndexOfUnescaped(readPosition, quoteChar);
                    if(readPosition == -1){
                        throw new InvalidPathException("Could not find matching close quote for " + quoteChar + " when parsing : " + charSequence);
                    }
                    readPosition++;
                }
            }
            if (skipRegex) {
                if (charAt(readPosition) == REGEX) {
                    readPosition = nextIndexOfUnescaped(readPosition, REGEX);
                    if(readPosition == -1){
                        throw new InvalidPathException("Could not find matching close for " + REGEX + " when parsing regex in : " + charSequence);
                    }
                    readPosition++;
                }
            }
            if (charAt(readPosition) == openChar) {
                opened++;
            }
            if (charAt(readPosition) == closeChar) {
                opened--;
                if (opened == 0) {
                    return readPosition;
                }
            }
            readPosition++;
        }
        return -1;
    }

    public int indexOfClosingBracket(int startPosition, boolean skipStrings, boolean skipRegex) {
        return indexOfMatchingCloseChar(startPosition, OPEN_PARENTHESIS, CLOSE_PARENTHESIS, skipStrings, skipRegex);
    }

    public int indexOfNextSignificantChar(char c) {
        return indexOfNextSignificantChar(position, c);
    }

    public int indexOfNextSignificantChar(int startPosition, char c) {
        int readPosition = startPosition + 1;
        while (!isOutOfBounds(readPosition) && charAt(readPosition) == SPACE) {
            readPosition++;
        }
        if (charAt(readPosition) == c) {
            return readPosition;
        } else {
            return -1;
        }
    }

    public int nextIndexOf(char c) {
        return nextIndexOf(position + 1, c);
    }

    public int nextIndexOf(int startPosition, char c) {
        int readPosition = startPosition;
        while (!isOutOfBounds(readPosition)) {
            if (charAt(readPosition) == c) {
                return readPosition;
            }
            readPosition++;
        }
        return -1;
    }

    public int nextIndexOfUnescaped(char c) {
        return nextIndexOfUnescaped(position, c);
    }

    public int nextIndexOfUnescaped(int startPosition, char c) {

        int readPosition = startPosition + 1;
        boolean inEscape = false;
        while (!isOutOfBounds(readPosition)) {
            if(inEscape){
                inEscape = false;
            } else if('\\' == charAt(readPosition)){
                inEscape = true;
            } else if (c == charAt(readPosition)){
                return readPosition;
            }
            readPosition ++;
        }
        return -1;
    }

    public char charAtOr(int postition, char defaultChar){
        if(!inBounds(postition)) return defaultChar;
        else return charAt(postition);
    }

    public boolean nextSignificantCharIs(int startPosition, char c) {
        int readPosition = startPosition + 1;
        while (!isOutOfBounds(readPosition) && charAt(readPosition) == SPACE) {
            readPosition++;
        }
        return !isOutOfBounds(readPosition) && charAt(readPosition) == c;
    }

    public boolean nextSignificantCharIs(char c) {
        return nextSignificantCharIs(position, c);
    }

    public char nextSignificantChar() {
        return nextSignificantChar(position);
    }

    public char nextSignificantChar(int startPosition) {
        int readPosition = startPosition + 1;
        while (!isOutOfBounds(readPosition) && charAt(readPosition) == SPACE) {
            readPosition++;
        }
        if (!isOutOfBounds(readPosition)) {
            return charAt(readPosition);
        } else {
            return ' ';
        }
    }

    public void readSignificantChar(char c) {
        if (skipBlanks().currentChar() != c) {
            throw new InvalidPathException(String.format("Expected character: %c", c));
        }
        incrementPosition(1);
    }

    public boolean hasSignificantSubSequence(CharSequence s) {
        skipBlanks();
        if (! inBounds(position + s.length() - 1)) {
            return false;
        }
        if (! subSequence(position, position + s.length()).equals(s)) {
            return false;
        }

        incrementPosition(s.length());
        return true;
    }

    public int indexOfPreviousSignificantChar(int startPosition){
        int readPosition = startPosition - 1;
        while (!isOutOfBounds(readPosition) && charAt(readPosition) == SPACE) {
            readPosition--;
        }
        if (!isOutOfBounds(readPosition)) {
            return readPosition;
        } else {
            return -1;
        }
    }

    public int indexOfPreviousSignificantChar(){
        return indexOfPreviousSignificantChar(position);
    }

    public char previousSignificantChar(int startPosition) {
        int previousSignificantCharIndex = indexOfPreviousSignificantChar(startPosition);
        if(previousSignificantCharIndex == -1) return ' ';
        else return charAt(previousSignificantCharIndex);
    }

    public char previousSignificantChar() {
        return previousSignificantChar(position);
    }

    public boolean currentIsTail() {
        return position >= endPosition;
    }

    public boolean hasMoreCharacters() {
        return inBounds(position + 1);
    }

    public boolean inBounds(int idx) {
        return (idx >= 0) && (idx <= endPosition);
    }
    public boolean inBounds() {
        return inBounds(position);
    }

    public boolean isOutOfBounds(int idx) {
        return !inBounds(idx);
    }

    public CharSequence subSequence(int start, int end) {
        return charSequence.subSequence(start, end);
    }

    public CharSequence charSequence() {
        return charSequence;
    }

    @Override
    public String toString() {
        return charSequence.toString();
    }

    public boolean isNumberCharacter(int readPosition) {
        char c = charAt(readPosition);
        //workaround for issue: https://github.com/json-path/JsonPath/issues/590
        return Character.isDigit(c) || c == MINUS  || c == PERIOD || c == SCI_E || c == SCI_e;
    }

    public CharacterIndex skipBlanks() {
        while (inBounds() && position < endPosition  && currentChar() == SPACE){
            incrementPosition(1);
        }
        return this;
    }

    private CharacterIndex skipBlanksAtEnd() {
        while (inBounds() && position < endPosition && lastCharIs(SPACE)){
            decrementEndPosition(1);
        }
        return this;
    }

    public CharacterIndex trim() {
        skipBlanks();
        skipBlanksAtEnd();
        return this;
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/internal/DefaultsImpl.java
================================================
package com.jayway.jsonpath.internal;

import com.jayway.jsonpath.Configuration.Defaults;
import com.jayway.jsonpath.Option;
import com.jayway.jsonpath.spi.json.JsonProvider;
import com.jayway.jsonpath.spi.json.JsonSmartJsonProvider;
import com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider;
import com.jayway.jsonpath.spi.mapper.MappingProvider;

import java.util.EnumSet;
import java.util.Set;

public final class DefaultsImpl implements Defaults {

  public static final DefaultsImpl INSTANCE = new DefaultsImpl();

  private final MappingProvider mappingProvider = new JsonSmartMappingProvider();

  @Override
  public JsonProvider jsonProvider() {
    return new JsonSmartJsonProvider();
  }

  @Override
  public Set<Option> options() {
    return EnumSet.noneOf(Option.class);
  }

  @Override
  public MappingProvider mappingProvider() {
    return mappingProvider;
  }

  private DefaultsImpl() {
  }

}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/internal/EvaluationAbortException.java
================================================
package com.jayway.jsonpath.internal;

public class EvaluationAbortException extends RuntimeException {

  private static final long serialVersionUID = 4419305302960432348L;

  // this is just a marker exception to abort evaluation, we don't care about
  // the stack
  @Override
  public Throwable fillInStackTrace() {
    return this;
  }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/internal/EvaluationContext.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath.internal;

import com.jayway.jsonpath.Configuration;

import java.util.Collection;
import java.util.List;

public interface EvaluationContext {

    /**
     *
     * @return the configuration used for this evaluation
     */
    Configuration configuration();

    /**
     * The json document that is evaluated
     *
     * @return the document
     */
    Object rootDocument();

    /**
     * This method does not adhere to configuration settings. It will return a single object (not wrapped in a List) even if the
     * configuration contains the {@link com.jayway.jsonpath.Option#ALWAYS_RETURN_LIST}
     *
     * @param <T> expected return type
     * @return evaluation result
     */
    <T> T getValue();

    /**
     * See {@link com.jayway.jsonpath.internal.EvaluationContext#getValue()}
     *
     * @param unwrap tells th underlying json provider if primitives should be unwrapped
     * @param <T> expected return type
     * @return evaluation result
     */
    <T> T getValue(boolean unwrap);


    /**
     * Returns the list of formalized paths that represent the result of the evaluation
     * @param <T>
     * @return list of paths
     */
    <T> T getPath();


    /**
     * Convenience method to get list of hits as String path representations
     *
     * @return list of path representations
     */
    List<String> getPathList();

    Collection<PathRef> updateOperations();

}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath.internal;

import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.EvaluationListener;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.MapFunction;
import com.jayway.jsonpath.Option;
import com.jayway.jsonpath.Predicate;
import com.jayway.jsonpath.ReadContext;
import com.jayway.jsonpath.TypeRef;
import com.jayway.jsonpath.spi.cache.Cache;
import com.jayway.jsonpath.spi.cache.CacheProvider;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;
import java.util.List;

import static com.jayway.jsonpath.JsonPath.compile;
import static com.jayway.jsonpath.internal.Utils.notEmpty;
import static com.jayway.jsonpath.internal.Utils.notNull;

public class JsonContext implements DocumentContext {

    private static final Logger logger = LoggerFactory.getLogger(JsonContext.class);

    private final Configuration configuration;
    private final Object json;

    JsonContext(Object json, Configuration configuration) {
        notNull(json, "json can not be null");
        notNull(configuration, "configuration can not be null");
        this.configuration = configuration;
        this.json = json;
    }


    @Override
    public Configuration configuration() {
        return configuration;
    }

    //------------------------------------------------
    //
    // ReadContext impl
    //
    //------------------------------------------------
    @Override
    public Object json() {
        return json;
    }

    @Override
    public String jsonString() {
        return configuration.jsonProvider().toJson(json);
    }

    @Override
    public <T> T read(String path, Predicate... filters) {
        notEmpty(path, "path can not be null or empty");
        return read(pathFromCache(path, filters));
    }

    @Override
    public <T> T read(String path, Class<T> type, Predicate... filters) {
        return convert(read(path, filters), type, configuration);
    }

    @Override
    public <T> T read(JsonPath path) {
        notNull(path, "path can not be null");
        return path.read(json, configuration);
    }

    @Override
    public <T> T read(JsonPath path, Class<T> type) {
        return convert(read(path), type, configuration);
    }

    @Override
    public <T> T read(JsonPath path, TypeRef<T> type) {
        return convert(read(path), type, configuration);
    }

    @Override
    public <T> T read(String path, TypeRef<T> type) {
        return convert(read(path), type, configuration);
    }

    @Override
    public ReadContext limit(int maxResults) {
        return withListeners(new LimitingEvaluationListener(maxResults));
    }

    @Override
    public ReadContext withListeners(EvaluationListener... listener) {
        return new JsonContext(json, configuration.setEvaluationListeners(listener));
    }

    private <T> T convert(Object obj, Class<T> targetType, Configuration configuration) {
        return configuration.mappingProvider().map(obj, targetType, configuration);
    }

    private <T> T convert(Object obj, TypeRef<T> targetType, Configuration configuration) {
        return configuration.mappingProvider().map(obj, targetType, configuration);
    }

    @Override
    public DocumentContext set(String path, Object newValue, Predicate... filters) {
        return set(pathFromCache(path, filters), newValue);
    }

    @Override
    public DocumentContext set(JsonPath path, Object newValue) {
        List<String> modified = path.set(json, newValue, configuration.addOptions(Option.AS_PATH_LIST));
        if (logger.isDebugEnabled()) {
            for (String p : modified) {
                logger.debug("Set path {} new value {}", p, newValue);
            }
        }
        return this;
    }

    @Override
    public DocumentContext map(String path, MapFunction mapFunction, Predicate... filters) {
        map(pathFromCache(path, filters), mapFunction);
        return this;
    }

    @Override
    public DocumentContext map(JsonPath path, MapFunction mapFunction) {
        Object obj = path.map(json, mapFunction, configuration);
        return obj==null ? null:this;
    }

    @Override
    public DocumentContext delete(String path, Predicate... filters) {
        return delete(pathFromCache(path, filters));
    }

    @Override
    public DocumentContext delete(JsonPath path) {
        List<String> modified = path.delete(json, configuration.addOptions(Option.AS_PATH_LIST));
        if (logger.isDebugEnabled()) {
            for (String p : modified) {
                logger.debug("Delete path {}", p);
            }
        }
        return this;
    }

    @Override
    public DocumentContext add(String path, Object value, Predicate... filters) {
        return add(pathFromCache(path, filters), value);
    }

    @Override
    public DocumentContext add(JsonPath path, Object value) {
        List<String> modified = path.add(json, value, configuration.addOptions(Option.AS_PATH_LIST));
        if (logger.isDebugEnabled()) {
            for (String p : modified) {
                logger.debug("Add path {} new value {}", p, value);
            }
        }
        return this;
    }

    @Override
    public DocumentContext put(String path, String key, Object value, Predicate... filters) {
        return put(pathFromCache(path, filters), key, value);
    }

    @Override
    public DocumentContext renameKey(String path, String oldKeyName, String newKeyName, Predicate... filters) {
        return renameKey(pathFromCache(path, filters), oldKeyName, newKeyName);
    }

    @Override
    public DocumentContext renameKey(JsonPath path, String oldKeyName, String newKeyName) {
        List<String> modified = path.renameKey(json, oldKeyName, newKeyName, configuration.addOptions(Option.AS_PATH_LIST));
        if (logger.isDebugEnabled()) {
            for (String p : modified) {
                logger.debug("Rename path {} new value {}", p, newKeyName);
            }
        }
        return this;
    }

    @Override
    public DocumentContext put(JsonPath path, String key, Object value) {
        List<String> modified = path.put(json, key, value, configuration.addOptions(Option.AS_PATH_LIST));
        if (logger.isDebugEnabled()) {
            for (String p : modified) {
                logger.debug("Put path {} key {} value {}", p, key, value);
            }
        }
        return this;
    }

    private JsonPath pathFromCache(String path, Predicate[] filters) {
        Cache cache = CacheProvider.getCache();
        String cacheKey = filters == null || filters.length == 0
            ? path : Utils.concat(path, Arrays.toString(filters));
        JsonPath jsonPath = cache.get(cacheKey);
        if (jsonPath == null) {
            jsonPath = compile(path, filters);
            cache.put(cacheKey, jsonPath);
        }
        return jsonPath;
    }

    private final static class LimitingEvaluationListener implements EvaluationListener {
        final int limit;

        private LimitingEvaluationListener(int limit) {
            this.limit = limit;
        }

        @Override
        public EvaluationContinuation resultFound(FoundResult found) {
            if (found.index() == limit - 1) {
                return EvaluationContinuation.ABORT;
            } else {
                return EvaluationContinuation.CONTINUE;
            }
        }
    }

}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/internal/JsonFormatter.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath.internal;

public class JsonFormatter {

    private static final String INDENT = "   ";

    private static final String NEW_LINE = System.getProperty("line.separator");

    private static final int MODE_SINGLE = 100;
    private static final int MODE_DOUBLE = 101;
    private static final int MODE_ESCAPE_SINGLE = 102;
    private static final int MODE_ESCAPE_DOUBLE = 103;
    private static final int MODE_BETWEEN = 104;

    private static void appendIndent(StringBuilder sb, int count) {
        for (; count > 0; --count) sb.append(INDENT);
    }

    public static String prettyPrint(String input) {

        input = input.replaceAll("[\\r\\n]", "");

        StringBuilder output = new StringBuilder(input.length() * 2);
        int mode = MODE_BETWEEN;
        int depth = 0;

        for (int i = 0; i < input.length(); ++i) {
            char ch = input.charAt(i);

            switch (mode) {
                case MODE_BETWEEN:
                    switch (ch) {
                        case '{':
                        case '[':
                            output.append(ch);
                            output.append(NEW_LINE);
                            appendIndent(output, ++depth);
                            break;
                        case '}':
                        case ']':
                            output.append(NEW_LINE);
                            appendIndent(output, --depth);
                            output.append(ch);
                            break;
                        case ',':
                            output.append(ch);
                            output.append(NEW_LINE);
                            appendIndent(output, depth);
                            break;
                        case ':':
                            output.append(" : ");
                            break;
                        case '\'':
                            output.append(ch);
                            mode = MODE_SINGLE;
                            break;
                        case '"':
                            output.append(ch);
                            mode = MODE_DOUBLE;
                            break;
                        case ' ':
                            break;
                        default:
                            output.append(ch);
                            break;
                    }
                    break;
                case MODE_ESCAPE_SINGLE:
                    output.append(ch);
                    mode = MODE_SINGLE;
                    break;
                case MODE_ESCAPE_DOUBLE:
                    output.append(ch);
                    mode = MODE_DOUBLE;
                    break;
                case MODE_SINGLE:
                    output.append(ch);
                    switch (ch) {
                        case '\'':
                            mode = MODE_BETWEEN;
                            break;
                        case '\\':
                            mode = MODE_ESCAPE_SINGLE;
                            break;
                    }
                    break;
                case MODE_DOUBLE:
                    output.append(ch);
                    switch (ch) {
                        case '"':
                            mode = MODE_BETWEEN;
                            break;
                        case '\\':
                            mode = MODE_ESCAPE_DOUBLE;
                            break;
                    }
                    break;
            }
        }
        return output.toString();
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/internal/ParseContextImpl.java
================================================
package com.jayway.jsonpath.internal;

import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.ParseContext;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import static com.jayway.jsonpath.internal.Utils.notEmpty;
import static com.jayway.jsonpath.internal.Utils.notNull;

public class ParseContextImpl implements ParseContext {

    private final Configuration configuration;

    public ParseContextImpl() {
        this(Configuration.defaultConfiguration());
    }

    public ParseContextImpl(Configuration configuration) {
        this.configuration = configuration;
    }

    @Override
    public DocumentContext parse(Object json) {
        notNull(json, "json object can not be null");
        return new JsonContext(json, configuration);
    }

    @Override
    public DocumentContext parse(String json) {
        notEmpty(json, "json string can not be null or empty");
        Object obj = configuration.jsonProvider().parse(json);
        return new JsonContext(obj, configuration);
    }

    @Override
    public DocumentContext parseUtf8(byte[] json) {
        notEmpty(json, "json bytes can not be null or empty");
        Object obj = configuration.jsonProvider().parse(json);
        return new JsonContext(obj, configuration);
    }

    @Override
    public DocumentContext parse(InputStream json) {
        return parse(json, "UTF-8");
    }

    @Override
    public DocumentContext parse(InputStream json, String charset) {
        notNull(json, "json input stream can not be null");
        notNull(charset, "charset can not be null");
        try {
            Object obj = configuration.jsonProvider().parse(json, charset);
            return new JsonContext(obj, configuration);
        } finally {
            Utils.closeQuietly(json);
        }
    }

    @Override
    public DocumentContext parse(File json) throws IOException {
        notNull(json, "json file can not be null");
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(json);
            return parse(fis);
        } finally {
            Utils.closeQuietly(fis);
        }
    }

    @Override
    @Deprecated
    public DocumentContext parse(URL url) throws IOException {
        notNull(url, "url can not be null");
        InputStream fis = null;
        try {
            fis = url.openStream();
            return parse(fis);
        } finally {
            Utils.closeQuietly(fis);
        }
    }

}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/internal/Path.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath.internal;

import com.jayway.jsonpath.Configuration;

/**
 *
 */
public interface Path {


    /**
     * Evaluates this path
     *
     * @param document the json document to apply the path on
     * @param rootDocument the root json document that started this evaluation
     * @param configuration configuration to use
     * @return EvaluationContext containing results of evaluation
     */
    EvaluationContext evaluate(Object document, Object rootDocument, Configuration configuration);

    /**
     * Evaluates this path
     *
     * @param document the json document to apply the path on
     * @param rootDocument the root json document that started this evaluation
     * @param configuration configuration to use
     * @param forUpdate is this a read or a write operation
     * @return EvaluationContext containing results of evaluation
     */
    EvaluationContext evaluate(Object document, Object rootDocument, Configuration configuration, boolean forUpdate);

    /**
     *
     * @return true id this path is definite
     */
    boolean isDefinite();

    /**
     *
     * @return true id this path is a function
     */
    boolean isFunctionPath();

    /**
     *
     * @return true id this path is starts with '$' and false if the path starts with '@'
     */
    boolean isRootPath();
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/internal/PathRef.java
================================================
package com.jayway.jsonpath.internal;

import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.InvalidModificationException;
import com.jayway.jsonpath.MapFunction;
import com.jayway.jsonpath.PathNotFoundException;
import com.jayway.jsonpath.spi.json.JsonProvider;

import java.util.Collection;

public abstract class PathRef implements Comparable<PathRef>  {

    public static final PathRef NO_OP = new PathRef(null){
        @Override
        public Object getAccessor() {
            return null;
        }

        @Override
        public void set(Object newVal, Configuration configuration) {}

        @Override
        public void convert(MapFunction mapFunction, Configuration configuration) {}

        @Override
        public void delete(Configuration configuration) {}

        @Override
        public void add(Object newVal, Configuration configuration) {}

        @Override
        public void put(String key, Object newVal, Configuration configuration) {}

        @Override
        public void renameKey(String oldKeyName, String newKeyName, Configuration configuration) {}

    };

    protected Object parent;


    private PathRef(Object parent) {
        this.parent = parent;
    }

    abstract Object getAccessor();

    public abstract void set(Object newVal, Configuration configuration);

    public abstract void convert(MapFunction mapFunction, Configuration configuration);

    public abstract void delete(Configuration configuration);

    public abstract void add(Object newVal, Configuration configuration);

    public abstract void put(String key, Object newVal, Configuration configuration);

    public abstract void renameKey(String oldKey,String newKeyName, Configuration configuration);

    protected void renameInMap(Object targetMap, String oldKeyName, String newKeyName, Configuration configuration){
        if(configuration.jsonProvider().isMap(targetMap)){
            if(configuration.jsonProvider().getMapValue(targetMap, oldKeyName) == JsonProvider.UNDEFINED){
                throw new PathNotFoundException("No results for Key "+oldKeyName+" found in map!");
            }
            configuration.jsonProvider().setProperty(targetMap, newKeyName, configuration.jsonProvider().getMapValue(targetMap, oldKeyName));
            configuration.jsonProvider().removeProperty(targetMap, oldKeyName);
        } else {
            throw new InvalidModificationException("Can only rename properties in a map");
        }
    }

    protected boolean targetInvalid(Object target){
        return target == JsonProvider.UNDEFINED || target == null;
    }

    @Override
    public int compareTo(PathRef o) {
        return this.getAccessor().toString().compareTo(o.getAccessor().toString()) * -1;
    }

    public static PathRef create(Object obj, String property){
        return new ObjectPropertyPathRef(obj, property);
    }

    public static PathRef create(Object obj, Collection<String> properties){
        return new ObjectMultiPropertyPathRef(obj, properties);
    }

    public static PathRef create(Object array, int index){
        return new ArrayIndexPathRef(array, index);
    }

    public static PathRef createRoot(Object root){
        return new RootPathRef(root);
    }

    private static class RootPathRef extends PathRef {

        private RootPathRef(Object parent) {
            super(parent);
        }

        @Override
        Object getAccessor() {
            return "$";
        }

        @Override
        public void set(Object newVal, Configuration configuration) {
            throw new InvalidModificationException("Invalid set operation");
        }

        public void convert(MapFunction mapFunction, Configuration configuration){
            throw new InvalidModificationException("Invalid map operation");
        }

        @Override
        public void delete(Configuration configuration) {
            throw new InvalidModificationException("Invalid delete operation");
        }

        @Override
        public void add(Object newVal, Configuration configuration) {
            if(configuration.jsonProvider().isArray(parent)){
                configuration.jsonProvider().setArrayIndex(parent, configuration.jsonProvider().length(parent), newVal);
            } else {
                throw new InvalidModificationException("Invalid add operation. $ is not an array");
            }
        }

        @Override
        public void put(String key, Object newVal, Configuration configuration) {
            if(configuration.jsonProvider().isMap(parent)){
                configuration.jsonProvider().setProperty(parent, key, newVal);
            } else {
                throw new InvalidModificationException("Invalid put operation. $ is not a map");
            }
        }

        @Override
        public void renameKey(String oldKeyName, String newKeyName, Configuration configuration) {
            Object target = parent;
            if(targetInvalid(target)){
                return;
            }
            renameInMap(target, oldKeyName, newKeyName, configuration);
        }

    }

    private static class ArrayIndexPathRef extends PathRef {

        private int index;

        private ArrayIndexPathRef(Object parent, int index) {
            super(parent);
            this.index = index;
        }

        public void set(Object newVal, Configuration configuration){
            configuration.jsonProvider().setArrayIndex(parent, index, newVal);
        }

        public void convert(MapFunction mapFunction, Configuration configuration){
            Object currentValue = configuration.jsonProvider().getArrayIndex(parent, index);
            configuration.jsonProvider().setArrayIndex(parent, index, mapFunction.map(currentValue, configuration));
        }

        public void delete(Configuration configuration){
            configuration.jsonProvider().removeProperty(parent, index);
        }

        public void add(Object value, Configuration configuration){
            Object target = configuration.jsonProvider().getArrayIndex(parent, index);
            if(targetInvalid(target)){
                return;
            }
            if(configuration.jsonProvider().isArray(target)){
                configuration.jsonProvider().setProperty(target, null, value);
            } else {
                throw new InvalidModificationException("Can only add to an array");
            }
        }

        public void put(String key, Object value, Configuration configuration){
            Object target = configuration.jsonProvider().getArrayIndex(parent, index);
            if(targetInvalid(target)){
                return;
            }
            if(configuration.jsonProvider().isMap(target)){
                configuration.jsonProvider().setProperty(target, key, value);
            } else {
                throw new InvalidModificationException("Can only add properties to a map");
            }
        }

        @Override
        public void renameKey(String oldKeyName, String newKeyName, Configuration configuration) {
            Object target = configuration.jsonProvider().getArrayIndex(parent, index);
            if(targetInvalid(target)){
                return;
            }
            renameInMap(target, oldKeyName, newKeyName, configuration);
        }

        @Override
        public Object getAccessor() {
            return index;
        }

        @Override
        public int compareTo(PathRef o) {
            if(o instanceof ArrayIndexPathRef){
                ArrayIndexPathRef pf = (ArrayIndexPathRef) o;
                return Integer.compare(pf.index, this.index);
            }
            return super.compareTo(o);
        }
    }

    private static class ObjectPropertyPathRef extends PathRef {

        private String property;

        private ObjectPropertyPathRef(Object parent, String property) {
            super(parent);
            this.property = property;
        }

        public void set(Object newVal, Configuration configuration){
            configuration.jsonProvider().setProperty(parent, property, newVal);
        }

        @Override
        public void convert(MapFunction mapFunction, Configuration configuration) {
            Object currentValue = configuration.jsonProvider().getMapValue(parent, property);
            configuration.jsonProvider().setProperty(parent, property, mapFunction.map(currentValue, configuration));
        }


        public void delete(Configuration configuration){
            configuration.jsonProvider().removeProperty(parent, property);
        }

        public void add(Object value, Configuration configuration){
            Object target = configuration.jsonProvider().getMapValue(parent, property);
            if(targetInvalid(target)){
                return;
            }
            if(configuration.jsonProvider().isArray(target)){
                configuration.jsonProvider().setArrayIndex(target, configuration.jsonProvider().length(target), value);
            } else {
                throw new InvalidModificationException("Can only add to an array");
            }
        }

        public void put(String key, Object value, Configuration configuration){
            Object target = configuration.jsonProvider().getMapValue(parent, property);
            if(targetInvalid(target)){
                return;
            }
            if(configuration.jsonProvider().isMap(target)){
                configuration.jsonProvider().setProperty(target, key, value);
            } else {
                throw new InvalidModificationException("Can only add properties to a map");
            }
        }

        @Override
        public void renameKey(String oldKeyName, String newKeyName, Configuration configuration) {
            Object target = configuration.jsonProvider().getMapValue(parent, property);
            if(targetInvalid(target)){
                return;
            }
            renameInMap(target, oldKeyName, newKeyName, configuration);
        }

        @Override
        public Object getAccessor() {
            return property;
        }
    }

    private static class ObjectMultiPropertyPathRef extends PathRef {

        private Collection<String> properties;

        private ObjectMultiPropertyPathRef(Object parent, Collection<String> properties) {
            super(parent);
            this.properties = properties;
        }

        public void set(Object newVal, Configuration configuration){
            for (String property : properties) {
                configuration.jsonProvider().setProperty(parent, property, newVal);
            }
        }
        public void convert(MapFunction mapFunction, Configuration configuration) {
            for (String property : properties) {
                Object currentValue = configuration.jsonProvider().getMapValue(parent, property);
                if (currentValue != JsonProvider.UNDEFINED) {
                    configuration.jsonProvider().setProperty(parent, property, mapFunction.map(currentValue, configuration));
                }
            }
        }

        public void delete(Configuration configuration){
            for (String property : properties) {
                configuration.jsonProvider().removeProperty(parent, property);
            }
        }

        @Override
        public void add(Object newVal, Configuration configuration) {
            throw new InvalidModificationException("Add can not be performed to multiple properties");
        }

        @Override
        public void put(String key, Object newVal, Configuration configuration) {
            throw new InvalidModificationException("Put can not be performed to multiple properties");
        }

        @Override
        public void renameKey(String oldKeyName, String newKeyName, Configuration configuration) {
            throw new InvalidModificationException("Rename can not be performed to multiple properties");
        }

        @Override
        public Object getAccessor() {
            return Utils.join("&&", properties);
        }
    }
}


================================================
FILE: json-path/src/main/java/com/jayway/jsonpath/internal/Utils.java
================================================
/*
 * Copyright 2011 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.jayway.jsonpath.internal;

import com.jayway.jsonpath.JsonPathException;

import java.io.Closeable;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Iterator;

public final class Utils {

    // accept a collection of objects, since all objects have toString()
    public static String join(String delimiter, String wrap, Iterable<?> objs) {
        Iterator<?> iter = objs.iterator();
        if (!iter.hasNext()) {
            return "";
        }
        StringBuilder buffer = new StringBuilder();
        buffer.append(wrap).append(iter.next()).append(wrap);
        while (iter.hasNext()) {
            buffer.append(delimiter).append(wrap).append(iter.next()).append(wrap);
        }
        return buffer.toString();
    }

    // accept a collection of objects, since all objects have toString()
    public static String join(String delimiter, Iterable<?> objs) {
        return join(delimiter, "", objs);
    }

    public static String concat(CharSequence... strings) {
        if (strings.length == 0) {
            return "";
        }
        if (strings.length == 1) {
            return strings[0].toString();
        }
        int length = 0;
        // -1 = no result, -2 = multiple results
        int indexOfSingleNonEmptyString = -1;
        for (int i = 0; i < strings.length; i++) {
            CharSequence charSequence = strings[i];
            int len = charSequence.length();
            length += len;
            if (indexOfSingleNonEmptyString != -2 && len > 0) {
                if (indexOfSingleNonEmptyString == -1) {
                    indexOfSingleNonEmptyString = i;
                } else {
                    indexOfSingleNonEmptyString = -2;
                }
            }
        }
        if (length == 0) {
            return "";
        }
        if (indexOfSingleNonEmptyString > 0) {
            return strings[indexOfSingleNonEmptyString].toString();
        }
        StringBuilder sb = new StringBuilder(length);
        for (CharSequence charSequence : strings) {
            sb.append(charSequence);
        }
        return sb.toString();

    }

    //---------------------------------------------------------
    //
    // IO
    //
    //---------------------------------------------------------

    public static void closeQuietly(Closeable closeable) {
        try {
            if (closeable != null) {
                closeable.close();
            }
        } catch (IOException ignore) {
        }
    }

    public static String escape(String str, boolean escapeSingleQuote) {
        if (str == null) {
            return null;
        }
        int len = str.length();
        StringWriter writer = new StringWriter(len * 2);

        for (int i = 0; i < len; i++) {
            char ch = str.charAt(i);

            // handle unicode
            if (ch > 0xfff) {
                writer.write("\\u" + hex(ch));
            } else if (ch > 0xff) {
                writer.write("\\u0" + hex(ch));
            } else if (ch > 0x7f) {
                writer.write("\\u00" + hex(ch));
            } else if (ch < 32) {
                switch (ch) {
                    case '\b':
                        writer.write('\\');
                        writer.write('b');
                        break;
                    case '\n':
                        writer.write('\\');
                        writer.write('n');
                        break;
                    case '\t':
                        writer.write('\\');
                        writer.write('t');
                        break;
                    case '\f':
                        writer.write('\\');
                        writer.write('f');
                        break;
                    case '\r':
                        writer.write('\\');
                        writer.write('r');
                        break;
                    default :
                        if (ch > 0xf) {
                            writer.write("\\u00" + hex(ch));
                        } else {
                            writer.write("\\u000" + hex(ch));
                        }
                        break;
                }
            } else {
                switch (ch) {
                    case '\'':
                        if (escapeSingleQuote) {
                            writer.write('\\');
                        }
                        writer.write('\'');
                        break;
                    case '"':
                        writer.write('\\');
                        writer.write('"');
                        break;
                    case '\\':
                        writer.write('\\');
                        writer.write('\\');
                        break;
                    case '/':
                        writer.write('\\');
                        writer.write('/');
                        break;
                    default :
                        writer.write(ch);
                        break;
                }
            }
        }
        return writer.toString();
    }

    public static String unescape(String str) {
        if (str == null) {
            return null;
        }
        int len = str.length();
        StringWriter writer = new StringWriter(len);
        StringBuilder unicode = new StringBuilder(4);
        boolean hadSlash = false;
        boolean inUnicode = false;
        for (int i = 0; i < len; i++) {
            char ch = str.charAt(i);
            if (inUnicode) {
                unicode.append(ch);
                if (unicode.length() == 4) {
                    try {
                        int value = Integer.parseInt(unicode.toString(), 16);
                        writer.write((char) value);
                        unicode.setLength(0);
                        inUnicode = false;
                        hadSlash = false;
                    } catch (NumberFormatException nfe) {
                        throw new JsonPathException("Unable to parse unicode value: " + unicode, nfe);
                    }
                }
                continue;
            }
            if (hadSlash) {
                hadSlash = false;
                switch (ch) {
                    case '\\':
                        writer.write('\\');
                        break;
                    case '\'':
                        writer.write('\'');
                        break;
                    case '\"':
                        writer.write('"');
                        break;
                    case 'r':
                        writer.write('\r');
                        break;
                    case 'f':
                        writer.write('\f');
                        break;
                    case 't':
                        writer.write('\t');
                        break;
                    case 'n':
                        writer.write('\n');
                        break;
                    case 'b':
                        writer.write('\b');
                        break;
                    case 'u':
                    {
                        inUnicode = true;
                        break;
                    }
                    default :
                        writer.write(ch);
                        break;
                }
                continue;
            } else if (ch == '\\') {
                hadSlash = true;
                continue;
            }
            writer.write(ch);
        }
        if (hadSlash) {
            writer.write('\\');
        }
        return writer.toString();
    }

    /**
     * Returns an upper case hexadecimal <code>String</code> for the given
     * character.
     *
     * @param ch The character to map.
     * @return An upper case hexadecimal <code>String</code>
     */
    public static String hex(char ch) {
        return Integer.toHexString(ch).toUpperCase();
    }

    /**
     * <p>Checks if a CharSequence is empty ("") or null.</p>
     * <p/>
     * <pre>
     * StringUtils.isEmpty(null)      = true
     * StringUtils.isEmpty("")        = true
     * StringUtils.isEmpty(" ")       = false
     * StringUtils.isEmpty("bob")     = false
     * StringUtils.isEmpty("  bob  ") = false
     * </pre>
     * <p/>
     * <p>NOTE: This method changed in Lang version 2.0.
     * It no longer trims the CharSequence.
     * That functionality is available in isBlank().</p>
     *
     * @param cs the CharSequence to check, may be null
     * @return {@code true} if the CharSequence is empty or null
     * @since 3.0 Changed signature from isEmpty(String) to isEmpty(CharSequence)
     */
    public static boolean isEmpty(CharSequence cs) {
        return cs == null || cs.length() == 0;
    }

    /**
     * Used by the indexOf(CharSequence methods) as a green implementation of indexOf.
     *
     * @param cs         the {@code CharSequence} to be processed
     * @param searchChar the {@code CharSequence} to be searched for
     * @param start      the start index
     * @return the index where the search sequence was found
     */
    static int indexOf(CharSequence cs, CharSequence searchChar, int start) {
        return cs.toString().indexOf(searchChar.toString(), start);
    }



    //---------------------------------------------------------
    //
    // Validators
    //
    //---------------------------------------------------------

    /**
     * <p>Validate that the specified argument is not {@code null};
     * otherwise throwing an exception with the specified message.
     * <p/>
     * <pre>Validate.notNull(myObject, "The object must not be null");</pre>
     *
     * @param <T>     the object type
     * @param object  the object to check
     * @param message the {@link String#format(String, Object...)} exception message if invalid, not null
     * @return the validated object (never {@code null} for method chaining)
     * @throws NullPointerException if the object is {@code null}
     */
    public static <T> T notNull(T object, String message) {
        if (object == null) {
            throw new IllegalArgumentException(message);
        }
        return object;
    }

    /**
     * <p>Validate that the specified argument is not {@code null};
     * otherwise throwing an exception with the specified message.
     * <p/>
     * <pre>Validate.notNull(myObject, "The object must not be null");</pre>
     *
     * @param <T>     the object type
     * @param object  the object to check
     * @param message the {@link String#format(String, Object...)} exception message if invalid, not null
     * @param values  the optional values for the formatted exception message
     * @return the validated object (never {@code null} for method chaining)
     * @throws NullPointerException if the object is {@code null}
     */
    public static <T> T notNull(T object, String message, Object... values) {
        if (object == null) {
            throw new IllegalArgumentException(String.format(message, values));
        }
        return object;
    }

    /**
     * <p>Validate that the argument condition is {@code true}; otherwise
     * throwing an exception with the specified message. This method is useful when
     * validating according to an arbitrary
Download .txt
gitextract_5g0slvqk/

├── .github/
│   └── workflows/
│       └── ci.yml
├── .gitignore
├── .travis.yml
├── LICENSE
├── Procfile
├── README.md
├── build.gradle
├── changelog.md
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── json-path/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── jayway/
│       │               └── jsonpath/
│       │                   ├── Configuration.java
│       │                   ├── Criteria.java
│       │                   ├── DocumentContext.java
│       │                   ├── EvaluationListener.java
│       │                   ├── Filter.java
│       │                   ├── InvalidCriteriaException.java
│       │                   ├── InvalidJsonException.java
│       │                   ├── InvalidModificationException.java
│       │                   ├── InvalidPathException.java
│       │                   ├── JsonPath.java
│       │                   ├── JsonPathException.java
│       │                   ├── MapFunction.java
│       │                   ├── Option.java
│       │                   ├── ParseContext.java
│       │                   ├── PathNotFoundException.java
│       │                   ├── Predicate.java
│       │                   ├── ReadContext.java
│       │                   ├── TypeRef.java
│       │                   ├── ValueCompareException.java
│       │                   ├── WriteContext.java
│       │                   ├── internal/
│       │                   │   ├── CharacterIndex.java
│       │                   │   ├── DefaultsImpl.java
│       │                   │   ├── EvaluationAbortException.java
│       │                   │   ├── EvaluationContext.java
│       │                   │   ├── JsonContext.java
│       │                   │   ├── JsonFormatter.java
│       │                   │   ├── ParseContextImpl.java
│       │                   │   ├── Path.java
│       │                   │   ├── PathRef.java
│       │                   │   ├── Utils.java
│       │                   │   ├── filter/
│       │                   │   │   ├── Evaluator.java
│       │                   │   │   ├── EvaluatorFactory.java
│       │                   │   │   ├── ExpressionNode.java
│       │                   │   │   ├── FilterCompiler.java
│       │                   │   │   ├── LogicalExpressionNode.java
│       │                   │   │   ├── LogicalOperator.java
│       │                   │   │   ├── PatternFlag.java
│       │                   │   │   ├── RelationalExpressionNode.java
│       │                   │   │   ├── RelationalOperator.java
│       │                   │   │   ├── ValueNode.java
│       │                   │   │   └── ValueNodes.java
│       │                   │   ├── function/
│       │                   │   │   ├── ParamType.java
│       │                   │   │   ├── Parameter.java
│       │                   │   │   ├── PassthruPathFunction.java
│       │                   │   │   ├── PathFunction.java
│       │                   │   │   ├── PathFunctionFactory.java
│       │                   │   │   ├── json/
│       │                   │   │   │   ├── Append.java
│       │                   │   │   │   └── KeySetFunction.java
│       │                   │   │   ├── latebinding/
│       │                   │   │   │   ├── ILateBindingValue.java
│       │                   │   │   │   ├── JsonLateBindingValue.java
│       │                   │   │   │   └── PathLateBindingValue.java
│       │                   │   │   ├── numeric/
│       │                   │   │   │   ├── AbstractAggregation.java
│       │                   │   │   │   ├── Average.java
│       │                   │   │   │   ├── Max.java
│       │                   │   │   │   ├── Min.java
│       │                   │   │   │   ├── StandardDeviation.java
│       │                   │   │   │   └── Sum.java
│       │                   │   │   ├── sequence/
│       │                   │   │   │   ├── AbstractSequenceAggregation.java
│       │                   │   │   │   ├── First.java
│       │                   │   │   │   ├── Index.java
│       │                   │   │   │   └── Last.java
│       │                   │   │   └── text/
│       │                   │   │       ├── Concatenate.java
│       │                   │   │       └── Length.java
│       │                   │   └── path/
│       │                   │       ├── ArrayIndexOperation.java
│       │                   │       ├── ArrayIndexToken.java
│       │                   │       ├── ArrayPathToken.java
│       │                   │       ├── ArraySliceOperation.java
│       │                   │       ├── ArraySliceToken.java
│       │                   │       ├── CompiledPath.java
│       │                   │       ├── EvaluationContextImpl.java
│       │                   │       ├── FunctionPathToken.java
│       │                   │       ├── PathCompiler.java
│       │                   │       ├── PathToken.java
│       │                   │       ├── PathTokenAppender.java
│       │                   │       ├── PathTokenFactory.java
│       │                   │       ├── PredicateContextImpl.java
│       │                   │       ├── PredicatePathToken.java
│       │                   │       ├── PropertyPathToken.java
│       │                   │       ├── RootPathToken.java
│       │                   │       ├── ScanPathToken.java
│       │                   │       └── WildcardPathToken.java
│       │                   └── spi/
│       │                       ├── cache/
│       │                       │   ├── Cache.java
│       │                       │   ├── CacheProvider.java
│       │                       │   ├── LRUCache.java
│       │                       │   └── NOOPCache.java
│       │                       ├── json/
│       │                       │   ├── AbstractJsonProvider.java
│       │                       │   ├── GsonJsonProvider.java
│       │                       │   ├── Jackson3JsonNodeJsonProvider.java
│       │                       │   ├── Jackson3JsonProvider.java
│       │                       │   ├── JacksonJsonNodeJsonProvider.java
│       │                       │   ├── JacksonJsonProvider.java
│       │                       │   ├── JakartaJsonProvider.java
│       │                       │   ├── JettisonProvider.java
│       │                       │   ├── JsonOrgJsonProvider.java
│       │                       │   ├── JsonProvider.java
│       │                       │   ├── JsonSmartJsonProvider.java
│       │                       │   └── TapestryJsonProvider.java
│       │                       └── mapper/
│       │                           ├── GsonMappingProvider.java
│       │                           ├── Jackson3MappingProvider.java
│       │                           ├── JacksonMappingProvider.java
│       │                           ├── JakartaMappingProvider.java
│       │                           ├── JsonOrgMappingProvider.java
│       │                           ├── JsonSmartMappingProvider.java
│       │                           ├── MappingException.java
│       │                           ├── MappingProvider.java
│       │                           └── TapestryMappingProvider.java
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── jayway/
│           │           └── jsonpath/
│           │               ├── BaseTest.java
│           │               ├── Configurations.java
│           │               ├── DeepScanTest.java
│           │               ├── EscapeTest.java
│           │               ├── EvaluationListenerTest.java
│           │               ├── FilterCompilerTest.java
│           │               ├── FilterParseTest.java
│           │               ├── FilterTest.java
│           │               ├── GsonJsonProviderTest.java
│           │               ├── InlineFilterTest.java
│           │               ├── Issue_487.java
│           │               ├── Issue_537.java
│           │               ├── Issue_721.java
│           │               ├── Issue_762.java
│           │               ├── Issue_786.java
│           │               ├── Issue_970.java
│           │               ├── Issue_973.java
│           │               ├── Jackson3JsonNodeJsonProviderMapperSupportTest.java
│           │               ├── Jackson3JsonNodeJsonProviderTest.java
│           │               ├── Jackson3Test.java
│           │               ├── JacksonJsonNodeJsonProviderMapperSupportTest.java
│           │               ├── JacksonJsonNodeJsonProviderTest.java
│           │               ├── JacksonTest.java
│           │               ├── JakartaJsonProviderTest.java
│           │               ├── JsonOrgJsonProviderTest.java
│           │               ├── JsonProviderTest.java
│           │               ├── JsonProviderTestObjectMapping.java
│           │               ├── MapperTest.java
│           │               ├── MultiPropTest.java
│           │               ├── OptionsTest.java
│           │               ├── PathCompilerTest.java
│           │               ├── PredicateTest.java
│           │               ├── ProviderInTest.java
│           │               ├── ReadContextTest.java
│           │               ├── ReturnTypeTest.java
│           │               ├── ScientificNotationTest.java
│           │               ├── TapestryJsonProviderTest.java
│           │               ├── TestSuppressExceptions.java
│           │               ├── TestUtils.java
│           │               ├── WriteTest.java
│           │               ├── internal/
│           │               │   ├── JsonContextTest.java
│           │               │   ├── UtilsTest.java
│           │               │   ├── filter/
│           │               │   │   ├── PatternFlagTest.java
│           │               │   │   ├── RegexpEvaluatorTest.java
│           │               │   │   └── RelationalOperatorTest.java
│           │               │   ├── function/
│           │               │   │   ├── BaseFunctionTest.java
│           │               │   │   ├── Issue191.java
│           │               │   │   ├── Issue234.java
│           │               │   │   ├── Issue273.java
│           │               │   │   ├── Issue612.java
│           │               │   │   ├── Issue629.java
│           │               │   │   ├── Issue680.java
│           │               │   │   ├── JSONEntityPathFunctionTest.java
│           │               │   │   ├── KeySetFunctionTest.java
│           │               │   │   ├── NestedFunctionTest.java
│           │               │   │   ├── NumericPathFunctionTest.java
│           │               │   │   └── SequentialPathFunctionTest.java
│           │               │   └── path/
│           │               │       └── PathTokenTest.java
│           │               ├── issue_613.java
│           │               └── old/
│           │                   ├── ArraySlicingTest.java
│           │                   ├── ComplianceTest.java
│           │                   ├── FilterTest.java
│           │                   ├── IssuesTest.java
│           │                   ├── JsonPathTest.java
│           │                   ├── JsonProviderTest.java
│           │                   ├── NullHandlingTest.java
│           │                   └── internal/
│           │                       ├── ArrayIndexFilterTest.java
│           │                       ├── ArrayPathTokenTest.java
│           │                       ├── PredicatePathTokenTest.java
│           │                       ├── PropertyPathTokenTest.java
│           │                       ├── ScanPathTokenTest.java
│           │                       ├── TestBase.java
│           │                       └── TestInternal3.java
│           └── resources/
│               ├── issue_191.json
│               ├── issue_24.json
│               ├── issue_76.json
│               ├── issue_76_2.json
│               ├── json-test-doc.json
│               ├── json_array.json
│               ├── json_array_multiple_delete.json
│               ├── keyset.json
│               └── simplelogger.properties
├── json-path-assert/
│   ├── README.md
│   ├── build.gradle
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── jayway/
│       │               ├── jsonassert/
│       │               │   ├── JsonAssert.java
│       │               │   ├── JsonAsserter.java
│       │               │   └── impl/
│       │               │       ├── JsonAsserterImpl.java
│       │               │       └── matcher/
│       │               │           ├── CollectionMatcher.java
│       │               │           ├── IsCollectionWithSize.java
│       │               │           ├── IsEmptyCollection.java
│       │               │           ├── IsMapContainingKey.java
│       │               │           ├── IsMapContainingValue.java
│       │               │           └── MapTypeSafeMatcher.java
│       │               └── jsonpath/
│       │                   └── matchers/
│       │                       ├── IsJson.java
│       │                       ├── JsonPathMatchers.java
│       │                       ├── WithJsonPath.java
│       │                       └── WithoutJsonPath.java
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── jayway/
│           │           ├── jsonassert/
│           │           │   └── JsonAssertTest.java
│           │           └── jsonpath/
│           │               └── matchers/
│           │                   ├── DemoTest.java
│           │                   ├── HasNoJsonPathTest.java
│           │                   ├── IsJsonFileTest.java
│           │                   ├── IsJsonStringTest.java
│           │                   ├── IsJsonTest.java
│           │                   ├── JsonPathMatchersTest.java
│           │                   ├── WithJsonPathTest.java
│           │                   ├── WithoutJsonPathTest.java
│           │                   └── helpers/
│           │                       ├── ResourceHelpers.java
│           │                       ├── StrictParsingConfiguration.java
│           │                       └── TestingMatchers.java
│           └── resources/
│               ├── books.json
│               ├── example.json
│               ├── invalid.json
│               ├── links.json
│               └── lotto.json
├── settings.gradle
└── system.properties
Download .txt
SYMBOL INDEX (2357 symbols across 204 files)

FILE: json-path-assert/src/main/java/com/jayway/jsonassert/JsonAssert.java
  class JsonAssert (line 23) | public class JsonAssert {
    method with (line 32) | public static JsonAsserter with(String json) {
    method with (line 43) | public static JsonAsserter with(Reader reader) throws IOException {
    method with (line 55) | public static JsonAsserter with(InputStream is) throws IOException {
    method collectionWithSize (line 62) | public static CollectionMatcher collectionWithSize(Matcher<? super Int...
    method mapContainingKey (line 66) | public static Matcher<Map<String, ?>> mapContainingKey(Matcher<String>...
    method mapContainingValue (line 70) | public static <V> Matcher<? super Map<?, V>> mapContainingValue(Matche...
    method emptyCollection (line 74) | public static Matcher<Collection<Object>> emptyCollection() {
    method convertReaderToString (line 78) | private static String convertReaderToString(Reader reader)

FILE: json-path-assert/src/main/java/com/jayway/jsonassert/JsonAsserter.java
  type JsonAsserter (line 5) | public interface JsonAsserter {
    method assertThat (line 22) | <T> JsonAsserter assertThat(String path, Matcher<T> matcher);
    method assertThat (line 31) | <T> JsonAsserter assertThat(String path, Matcher<T> matcher, String me...
    method assertEquals (line 42) | <T> JsonAsserter assertEquals(String path, T expected);
    method assertEquals (line 44) | <T> JsonAsserter assertEquals(String path, T expected, String message);
    method assertNotDefined (line 53) | JsonAsserter assertNotDefined(String path);
    method assertNotDefined (line 55) | JsonAsserter assertNotDefined(String path, String message);
    method assertNull (line 65) | JsonAsserter assertNull(String path);
    method assertNull (line 66) | JsonAsserter assertNull(String path, String message);
    method assertNotNull (line 75) | <T> JsonAsserter assertNotNull(String path);
    method assertNotNull (line 77) | <T> JsonAsserter assertNotNull(String path, String message);
    method and (line 89) | JsonAsserter and();

FILE: json-path-assert/src/main/java/com/jayway/jsonassert/impl/JsonAsserterImpl.java
  class JsonAsserterImpl (line 13) | public class JsonAsserterImpl implements JsonAsserter {
    method JsonAsserterImpl (line 22) | public JsonAsserterImpl(Object jsonObject) {
    method assertThat (line 29) | @SuppressWarnings("unchecked")
    method assertThat (line 51) | @SuppressWarnings("unchecked")
    method assertEquals (line 63) | public <T> JsonAsserter assertEquals(String path, T expected) {
    method assertNotDefined (line 70) | public JsonAsserter assertNotDefined(String path) {
    method assertNotDefined (line 82) | @Override
    method assertNull (line 98) | public JsonAsserter assertNull(String path) {
    method assertNull (line 102) | @Override
    method assertEquals (line 107) | @Override
    method assertNotNull (line 115) | public <T> JsonAsserter assertNotNull(String path) {
    method assertNotNull (line 119) | @Override
    method and (line 127) | public JsonAsserter and() {

FILE: json-path-assert/src/main/java/com/jayway/jsonassert/impl/matcher/CollectionMatcher.java
  class CollectionMatcher (line 36) | public abstract class CollectionMatcher<C extends Collection<?>> extends...
    method matches (line 37) | @SuppressWarnings("unchecked")
    method matchesSafely (line 45) | protected abstract boolean matchesSafely(C collection);

FILE: json-path-assert/src/main/java/com/jayway/jsonassert/impl/matcher/IsCollectionWithSize.java
  class IsCollectionWithSize (line 42) | public class IsCollectionWithSize<E> extends CollectionMatcher<Collectio...
    method IsCollectionWithSize (line 45) | public IsCollectionWithSize(Matcher<? super Integer> sizeMatcher) {
    method matchesSafely (line 49) | @Override
    method describeTo (line 54) | @Override
    method hasSize (line 63) | public static <E> Matcher<? super Collection<? extends E>> hasSize(Mat...
    method hasSize (line 73) | public static <E> Matcher<? super Collection<? extends E>> hasSize(int...

FILE: json-path-assert/src/main/java/com/jayway/jsonassert/impl/matcher/IsEmptyCollection.java
  class IsEmptyCollection (line 40) | public class IsEmptyCollection<E> extends CollectionMatcher<Collection<E...
    method matchesSafely (line 42) | @Override
    method describeTo (line 47) | @Override
    method empty (line 55) | public static <E> Matcher<Collection<E>> empty() {

FILE: json-path-assert/src/main/java/com/jayway/jsonassert/impl/matcher/IsMapContainingKey.java
  class IsMapContainingKey (line 39) | public class IsMapContainingKey<K> extends MapTypeSafeMatcher<Map<K,?>> {
    method IsMapContainingKey (line 42) | public IsMapContainingKey(Matcher<K> keyMatcher) {
    method matchesSafely (line 46) | @Override
    method describeTo (line 56) | @Override
    method hasKey (line 62) | public static <K> Matcher<Map<K,?>> hasKey(K key) {
    method hasKey (line 66) | public static <K> Matcher<Map<K,?>> hasKey(Matcher<K> keyMatcher) {

FILE: json-path-assert/src/main/java/com/jayway/jsonassert/impl/matcher/IsMapContainingValue.java
  class IsMapContainingValue (line 39) | public class IsMapContainingValue<V> extends MapTypeSafeMatcher<Map<?,V>>{
    method IsMapContainingValue (line 42) | public IsMapContainingValue(Matcher<? super V> valueMatcher) {
    method matchesSafely (line 46) | @Override
    method describeTo (line 56) | @Override
    method hasValue (line 62) | public static <V> Matcher<? super Map<?,V>> hasValue(V value) {
    method hasValue (line 66) | public static <V> Matcher<? super Map<?,V>> hasValue(Matcher<? super V...

FILE: json-path-assert/src/main/java/com/jayway/jsonassert/impl/matcher/MapTypeSafeMatcher.java
  class MapTypeSafeMatcher (line 36) | public abstract class MapTypeSafeMatcher<M extends Map<?, ?>> extends Ba...
    method matches (line 37) | @SuppressWarnings("unchecked")
    method matchesSafely (line 42) | protected abstract boolean matchesSafely(M map);

FILE: json-path-assert/src/main/java/com/jayway/jsonpath/matchers/IsJson.java
  class IsJson (line 13) | public class IsJson<T> extends TypeSafeMatcher<T> {
    method IsJson (line 16) | public IsJson(Matcher<? super ReadContext> jsonMatcher) {
    method matchesSafely (line 20) | @Override
    method describeTo (line 32) | public void describeTo(Description description) {
    method describeMismatchSafely (line 36) | @Override
    method buildMismatchDescription (line 48) | private static void buildMismatchDescription(Object json, Description ...
    method parse (line 56) | private static ReadContext parse(Object object) throws IOException {

FILE: json-path-assert/src/main/java/com/jayway/jsonpath/matchers/JsonPathMatchers.java
  class JsonPathMatchers (line 14) | public class JsonPathMatchers {
    method JsonPathMatchers (line 16) | private JsonPathMatchers() {
    method hasJsonPath (line 20) | public static Matcher<? super Object> hasJsonPath(String jsonPath) {
    method hasJsonPath (line 26) | public static <T> Matcher<? super Object> hasJsonPath(String jsonPath,...
    method hasNoJsonPath (line 30) | public static Matcher<? super Object> hasNoJsonPath(String jsonPath) {
    method isJson (line 34) | public static Matcher<Object> isJson() {
    method isJson (line 38) | public static Matcher<Object> isJson(Matcher<? super ReadContext> matc...
    method isJsonString (line 42) | public static Matcher<String> isJsonString(Matcher<? super ReadContext...
    method isJsonFile (line 46) | public static Matcher<File> isJsonFile(Matcher<? super ReadContext> ma...
    method withJsonPath (line 50) | public static Matcher<? super ReadContext> withJsonPath(String jsonPat...
    method withJsonPath (line 54) | public static Matcher<? super ReadContext> withJsonPath(JsonPath jsonP...
    method withoutJsonPath (line 60) | public static Matcher<? super ReadContext> withoutJsonPath(String json...
    method withoutJsonPath (line 64) | public static Matcher<? super ReadContext> withoutJsonPath(JsonPath js...
    method withJsonPath (line 68) | public static <T> Matcher<? super ReadContext> withJsonPath(String jso...
    method withJsonPath (line 72) | public static <T> Matcher<? super ReadContext> withJsonPath(JsonPath j...

FILE: json-path-assert/src/main/java/com/jayway/jsonpath/matchers/WithJsonPath.java
  class WithJsonPath (line 11) | public class WithJsonPath<T> extends TypeSafeMatcher<ReadContext> {
    method WithJsonPath (line 15) | public WithJsonPath(JsonPath jsonPath, Matcher<T> resultMatcher) {
    method matchesSafely (line 20) | @Override
    method describeTo (line 30) | public void describeTo(Description description) {
    method describeMismatchSafely (line 38) | @Override

FILE: json-path-assert/src/main/java/com/jayway/jsonpath/matchers/WithoutJsonPath.java
  class WithoutJsonPath (line 9) | public class WithoutJsonPath extends TypeSafeDiagnosingMatcher<ReadConte...
    method WithoutJsonPath (line 12) | public WithoutJsonPath(JsonPath jsonPath) {
    method matchesSafely (line 16) | @Override
    method describeTo (line 30) | @Override

FILE: json-path-assert/src/test/java/com/jayway/jsonassert/JsonAssertTest.java
  class JsonAssertTest (line 11) | public class JsonAssertTest {
    method invalid_path (line 50) | @Test
    method has_path (line 56) | @Test
    method assert_gears (line 62) | @Test
    method failed_error_message (line 70) | @Test
    method links_document (line 76) | @Test
    method a_document_can_be_expected_not_to_contain_a_path (line 87) | @Test
    method a_value_can_asserted_to_be_null (line 92) | @Test
    method ends_with_evalueates (line 97) | @Test
    method a_path_can_be_asserted_with_matcher (line 102) | @Test
    method list_content_can_be_asserted_with_matcher (line 109) | @Test
    method list_content_can_be_asserted_with_nested_matcher (line 118) | @Test
    method map_content_can_be_asserted_with_matcher (line 123) | @Test
    method an_empty_collection (line 145) | @Test
    method a_path_can_be_asserted_equal_to (line 150) | @Test
    method path_including_wildcard_path_followed_by_another_path_concatenates_results_to_list (line 160) | @Test
    method testNotDefined (line 165) | @Test
    method assert_that_invalid_path_is_thrown (line 172) | @Test
    method testAssertEqualsInteger (line 179) | @Test
    method testAssertEqualsIntegerInvalidExpected (line 184) | @Test
    method testAssertEqualsIntegerInvalidField (line 189) | @Test
    method getResourceAsStream (line 194) | private InputStream getResourceAsStream(String resourceName) {

FILE: json-path-assert/src/test/java/com/jayway/jsonpath/matchers/DemoTest.java
  class DemoTest (line 14) | @Disabled
    method shouldFailOnJsonString (line 16) | @Test
    method shouldFailOnJsonFile (line 22) | @Test
    method shouldFailOnInvalidJsonString (line 28) | @Test
    method shouldFailOnInvalidJsonFile (line 34) | @Test
    method shouldFailOnTypedJsonString (line 40) | @Test
    method shouldFailOnTypedJsonFile (line 46) | @Test
    method shouldFailOnTypedInvalidJsonString (line 52) | @Test
    method shouldFailOnTypedInvalidJsonFile (line 58) | @Test
    method shouldFailOnNonExistingJsonPath (line 64) | @Test
    method shouldFailOnExistingJsonPath (line 70) | @Test
    method shouldFailOnExistingJsonPathAlternative (line 76) | @Test

FILE: json-path-assert/src/test/java/com/jayway/jsonpath/matchers/HasNoJsonPathTest.java
  class HasNoJsonPathTest (line 9) | public class HasNoJsonPathTest {
    method shouldMatchMissingJsonPath (line 15) | @Test
    method shouldNotMatchExistingJsonPath (line 20) | @Test
    method shouldNotMatchExplicitNull (line 25) | @Test
    method shouldBeDescriptive (line 30) | @Test

FILE: json-path-assert/src/test/java/com/jayway/jsonpath/matchers/IsJsonFileTest.java
  class IsJsonFileTest (line 20) | public class IsJsonFileTest {
    method setupStrictJsonParsing (line 24) | @BeforeAll
    method setupDefaultJsonParsing (line 29) | @AfterAll
    method shouldMatchJsonFileEvaluatedToTrue (line 34) | @Test
    method shouldNotMatchJsonFileEvaluatedToFalse (line 39) | @Test
    method shouldNotMatchInvalidJsonFile (line 44) | @Test
    method shouldBeDescriptive (line 50) | @Test
    method shouldDescribeMismatchOfValidJson (line 59) | @Test
    method shouldDescribeMismatchOfInvalidJson (line 67) | @Test

FILE: json-path-assert/src/test/java/com/jayway/jsonpath/matchers/IsJsonStringTest.java
  class IsJsonStringTest (line 18) | public class IsJsonStringTest {
    method setupStrictJsonParsing (line 21) | @BeforeAll
    method setupDefaultJsonParsing (line 26) | @AfterAll
    method shouldMatchJsonStringEvaluatedToTrue (line 31) | @Test
    method shouldNotMatchJsonStringEvaluatedToFalse (line 36) | @Test
    method shouldNotMatchInvalidJsonString (line 41) | @Test
    method shouldBeDescriptive (line 47) | @Test
    method shouldDescribeMismatchOfValidJson (line 56) | @Test
    method shouldDescribeMismatchOfInvalidJson (line 64) | @Test

FILE: json-path-assert/src/test/java/com/jayway/jsonpath/matchers/IsJsonTest.java
  class IsJsonTest (line 22) | public class IsJsonTest {
    method setupStrictJsonParsing (line 29) | @BeforeAll
    method setupDefaultJsonParsing (line 34) | @AfterAll
    method shouldMatchOnEmptyJsonObject (line 39) | @Test
    method shouldMatchOnJsonObject (line 44) | @Test
    method shouldMatchOnEmptyJsonArray (line 49) | @Test
    method shouldMatchOnJsonArray (line 54) | @Test
    method shouldMatchValidJson (line 59) | @Test
    method shouldNotMatchInvalidJson (line 65) | @Test
    method shouldMatchJsonObjectEvaluatedToTrue (line 77) | @Test
    method shouldNotMatchJsonObjectEvaluatedToFalse (line 82) | @Test
    method shouldMatchJsonStringEvaluatedToTrue (line 87) | @Test
    method shouldNotMatchJsonStringEvaluatedToFalse (line 92) | @Test
    method shouldMatchJsonFileEvaluatedToTrue (line 97) | @Test
    method shouldNotMatchJsonFileEvaluatedToFalse (line 102) | @Test
    method shouldNotMatchNonExistingJsonFile (line 107) | @Test
    method shouldBeDescriptive (line 113) | @Test
    method shouldDescribeMismatchOfValidJson (line 122) | @Test
    method shouldDescribeMismatchOfInvalidJson (line 130) | @Test
    method parseJson (line 138) | private static Object parseJson(String json) {

FILE: json-path-assert/src/test/java/com/jayway/jsonpath/matchers/JsonPathMatchersTest.java
  class JsonPathMatchersTest (line 21) | public class JsonPathMatchersTest {
    method setupStrictJsonParsing (line 26) | @BeforeAll
    method setupDefaultJsonParsing (line 32) | @AfterAll
    method shouldMatchJsonPathToStringValue (line 37) | @Test
    method shouldMatchJsonPathToIntegerValue (line 50) | @Test
    method shouldMatchJsonPathToDoubleValue (line 63) | @Test
    method shouldMatchJsonPathToBooleanValue (line 76) | @Test
    method shouldMatchJsonPathToJsonObject (line 89) | @Test
    method shouldMatchJsonPathToEmptyJsonObject (line 102) | @Test
    method shouldMatchJsonPathToJsonArray (line 115) | @Test
    method shouldMatchJsonPathToEmptyJsonArray (line 130) | @Test
    method willMatchIndefiniteJsonPathsEvaluatedToEmptyLists (line 145) | @Test
    method shouldMatchJsonPathToNullValue (line 157) | @Test
    method shouldNotMatchNonExistingJsonPath (line 170) | @Test
    method shouldNotMatchInvalidJsonWithPath (line 184) | @Test
    method shouldNotMatchInvalidJsonWithPathAndValue (line 191) | @Test
    method shouldMatchJsonPathOnFile (line 198) | @Test
    method shouldNotMatchJsonPathOnNonExistingFile (line 203) | @Test
    method shouldMatchJsonPathOnParsedJsonObject (line 209) | @Test
    method shouldMatchJsonPathOnReadContext (line 215) | @Test

FILE: json-path-assert/src/test/java/com/jayway/jsonpath/matchers/WithJsonPathTest.java
  class WithJsonPathTest (line 21) | public class WithJsonPathTest {
    method shouldMatchExistingCompiledJsonPath (line 24) | @Test
    method shouldMatchExistingStringJsonPath (line 32) | @Test
    method shouldNotMatchNonExistingJsonPath (line 40) | @Test
    method shouldNotMatchNonExistingStringJsonPath (line 47) | @Test
    method shouldMatchJsonPathEvaluatedToStringValue (line 54) | @Test
    method shouldMatchJsonPathEvaluatedToIntegerValue (line 62) | @Test
    method shouldMatchJsonPathEvaluatedToDoubleValue (line 68) | @Test
    method shouldMatchJsonPathEvaluatedToCollectionValue (line 74) | @Test
    method shouldFailOnInvalidJsonPath (line 86) | @Test
    method shouldNotMatchOnInvalidJson (line 91) | @Test
    method shouldBeDescriptive (line 97) | @Test
    method shouldDescribeMismatchOfEvaluation (line 106) | @Test
    method shouldDescribeMismatchOfPathNotFound (line 115) | @Test

FILE: json-path-assert/src/test/java/com/jayway/jsonpath/matchers/WithoutJsonPathTest.java
  class WithoutJsonPathTest (line 12) | public class WithoutJsonPathTest {
    method shouldMatchNonExistingJsonPath (line 22) | @Test
    method shouldNotMatchExistingJsonPath (line 28) | @Test
    method shouldBeDescriptive (line 38) | @Test

FILE: json-path-assert/src/test/java/com/jayway/jsonpath/matchers/helpers/ResourceHelpers.java
  class ResourceHelpers (line 13) | public class ResourceHelpers {
    method resource (line 14) | public static String resource(String resource) {
    method resourceAsFile (line 22) | public static File resourceAsFile(String resource) {

FILE: json-path-assert/src/test/java/com/jayway/jsonpath/matchers/helpers/StrictParsingConfiguration.java
  class StrictParsingConfiguration (line 14) | public class StrictParsingConfiguration implements Configuration.Defaults {
    method jsonProvider (line 19) | public JsonProvider jsonProvider() {
    method mappingProvider (line 23) | public MappingProvider mappingProvider() {
    method options (line 27) | public Set<Option> options() {

FILE: json-path-assert/src/test/java/com/jayway/jsonpath/matchers/helpers/TestingMatchers.java
  class TestingMatchers (line 11) | public class TestingMatchers {
    method withPathEvaluatedTo (line 16) | public static Matcher<ReadContext> withPathEvaluatedTo(final boolean r...

FILE: json-path/src/main/java/com/jayway/jsonpath/Configuration.java
  class Configuration (line 29) | public class Configuration {
    method setDefaults (line 37) | public static synchronized void setDefaults(Defaults defaults){
    method getEffectiveDefaults (line 41) | private static Defaults getEffectiveDefaults(){
    method Configuration (line 54) | private Configuration(JsonProvider jsonProvider, MappingProvider mappi...
    method addEvaluationListeners (line 70) | public Configuration addEvaluationListeners(EvaluationListener... eval...
    method setEvaluationListeners (line 79) | public Configuration setEvaluationListeners(EvaluationListener... eval...
    method getEvaluationListeners (line 87) | public Collection<EvaluationListener> getEvaluationListeners(){
    method jsonProvider (line 96) | public Configuration jsonProvider(JsonProvider newJsonProvider) {
    method jsonProvider (line 104) | public JsonProvider jsonProvider() {
    method mappingProvider (line 113) | public Configuration mappingProvider(MappingProvider newMappingProvide...
    method mappingProvider (line 121) | public MappingProvider mappingProvider() {
    method addOptions (line 130) | public Configuration addOptions(Option... options) {
    method setOptions (line 142) | public Configuration setOptions(Option... options) {
    method getOptions (line 150) | public Set<Option> getOptions() {
    method containsOption (line 159) | public boolean containsOption(Option option){
    method defaultConfiguration (line 167) | public static Configuration defaultConfiguration() {
    method builder (line 176) | public static ConfigurationBuilder builder() {
    class ConfigurationBuilder (line 183) | public static class ConfigurationBuilder {
      method jsonProvider (line 190) | public ConfigurationBuilder jsonProvider(JsonProvider provider) {
      method mappingProvider (line 195) | public ConfigurationBuilder mappingProvider(MappingProvider provider) {
      method options (line 200) | public ConfigurationBuilder options(Option... flags) {
      method options (line 207) | public ConfigurationBuilder options(Set<Option> options) {
      method evaluationListener (line 212) | public ConfigurationBuilder evaluationListener(EvaluationListener......
      method evaluationListener (line 217) | public ConfigurationBuilder evaluationListener(Collection<Evaluation...
      method build (line 222) | public Configuration build() {
    type Defaults (line 236) | public interface Defaults {
      method jsonProvider (line 241) | JsonProvider jsonProvider();
      method options (line 247) | Set<Option> options();
      method mappingProvider (line 254) | MappingProvider mappingProvider();
    method equals (line 258) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/Criteria.java
  class Criteria (line 38) | @SuppressWarnings("unchecked")
    method Criteria (line 46) | private Criteria(List<Criteria> criteriaChain, ValueNode left) {
    method Criteria (line 52) | private Criteria(ValueNode left) {
    method apply (line 56) | @Override
    method toString (line 66) | @Override
    method toRelationalExpressionNodes (line 71) | private Collection<RelationalExpressionNode> toRelationalExpressionNod...
    method where (line 85) | @Deprecated
    method where (line 99) | public static Criteria where(String key) {
    method and (line 109) | public Criteria and(String key) {
    method is (line 120) | public Criteria is(Object o) {
    method eq (line 132) | public Criteria eq(Object o) {
    method ne (line 142) | public Criteria ne(Object o) {
    method lt (line 154) | public Criteria lt(Object o) {
    method lte (line 166) | public Criteria lte(Object o) {
    method gt (line 178) | public Criteria gt(Object o) {
    method gte (line 190) | public Criteria gte(Object o) {
    method regex (line 202) | public Criteria regex(Pattern pattern) {
    method in (line 216) | public Criteria in(Object... o) {
    method in (line 227) | public Criteria in(Collection<?> c) {
    method contains (line 241) | public Criteria contains(Object o) {
    method nin (line 254) | public Criteria nin(Object... o) {
    method nin (line 265) | public Criteria nin(Collection<?> c) {
    method subsetof (line 280) | public Criteria subsetof(Object... o) {
    method subsetof (line 292) | public Criteria subsetof(Collection<?> c) {
    method anyof (line 306) | public Criteria anyof(Object... o) {
    method anyof (line 317) | public Criteria anyof(Collection<?> c) {
    method noneof (line 331) | public Criteria noneof(Object... o) {
    method noneof (line 342) | public Criteria noneof(Collection<?> c) {
    method all (line 356) | public Criteria all(Object... o) {
    method all (line 367) | public Criteria all(Collection<?> c) {
    method size (line 385) | public Criteria size(int size) {
    method type (line 407) | public Criteria type(Class<?> clazz) {
    method exists (line 419) | public Criteria exists(boolean shouldExist) {
    method notEmpty (line 431) | @Deprecated
    method empty (line 442) | public Criteria empty(boolean empty) {
    method matches (line 454) | public Criteria matches(Predicate p) {
    method parse (line 468) | @Deprecated
    method create (line 490) | @Deprecated
    method prefixPath (line 499) | private static String prefixPath(String key){
    method checkComplete (line 506) | private void checkComplete(){

FILE: json-path/src/main/java/com/jayway/jsonpath/DocumentContext.java
  type DocumentContext (line 17) | public interface DocumentContext extends ReadContext, WriteContext {

FILE: json-path/src/main/java/com/jayway/jsonpath/EvaluationListener.java
  type EvaluationListener (line 21) | public interface EvaluationListener {
    method resultFound (line 28) | EvaluationContinuation resultFound(FoundResult found);
    type EvaluationContinuation (line 30) | enum EvaluationContinuation {
    type FoundResult (line 44) | interface FoundResult {
      method index (line 49) | int index();
      method path (line 55) | String path();
      method result (line 61) | Object result();

FILE: json-path/src/main/java/com/jayway/jsonpath/Filter.java
  class Filter (line 28) | public abstract class Filter implements Predicate {
    method filter (line 35) | public static Filter filter(Predicate predicate) {
    method filter (line 44) | public static Filter filter(Collection<Predicate> predicates) {
    method apply (line 48) | @Override
    method or (line 52) | public Filter or(final Predicate other){
    method and (line 56) | public Filter and(final Predicate other){
    method parse (line 65) | public static Filter parse(String filter){
    class SingleFilter (line 69) | private static final class SingleFilter extends Filter {
      method SingleFilter (line 73) | private SingleFilter(Predicate predicate) {
      method apply (line 77) | @Override
      method toString (line 82) | @Override
    class AndFilter (line 93) | private static final class AndFilter extends Filter {
      method AndFilter (line 97) | private AndFilter(Collection<Predicate> predicates) {
      method AndFilter (line 101) | private AndFilter(Predicate left, Predicate right) {
      method and (line 105) | public Filter and(final Predicate other){
      method apply (line 111) | @Override
      method toString (line 121) | @Override
    class OrFilter (line 143) | private static final class OrFilter extends Filter {
      method OrFilter (line 148) | private OrFilter(Predicate left, Predicate right) {
      method and (line 153) | public Filter and(final Predicate other){
      method apply (line 157) | @Override
      method toString (line 163) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/InvalidCriteriaException.java
  class InvalidCriteriaException (line 17) | @SuppressWarnings("serial")
    method InvalidCriteriaException (line 19) | public InvalidCriteriaException() {
    method InvalidCriteriaException (line 22) | public InvalidCriteriaException(String message) {
    method InvalidCriteriaException (line 26) | public InvalidCriteriaException(String message, Throwable cause) {
    method InvalidCriteriaException (line 30) | public InvalidCriteriaException(Throwable cause) {

FILE: json-path/src/main/java/com/jayway/jsonpath/InvalidJsonException.java
  class InvalidJsonException (line 17) | @SuppressWarnings("serial")
    method InvalidJsonException (line 25) | public InvalidJsonException() {
    method InvalidJsonException (line 29) | public InvalidJsonException(String message) {
    method InvalidJsonException (line 34) | public InvalidJsonException(String message, Throwable cause) {
    method InvalidJsonException (line 39) | public InvalidJsonException(Throwable cause) {
    method InvalidJsonException (line 47) | public InvalidJsonException(final Throwable cause, final String json) {
    method getJson (line 55) | public String getJson() {

FILE: json-path/src/main/java/com/jayway/jsonpath/InvalidModificationException.java
  class InvalidModificationException (line 17) | public class InvalidModificationException extends JsonPathException {
    method InvalidModificationException (line 18) | public InvalidModificationException(String message) {

FILE: json-path/src/main/java/com/jayway/jsonpath/InvalidPathException.java
  class InvalidPathException (line 17) | @SuppressWarnings("serial")
    method InvalidPathException (line 20) | public InvalidPathException() {
    method InvalidPathException (line 23) | public InvalidPathException(String message) {
    method InvalidPathException (line 27) | public InvalidPathException(String message, Throwable cause) {
    method InvalidPathException (line 31) | public InvalidPathException(Throwable cause) {

FILE: json-path/src/main/java/com/jayway/jsonpath/JsonPath.java
  class JsonPath (line 91) | public class JsonPath {
    method JsonPath (line 95) | private JsonPath(String jsonPath, Predicate[] filters) {
    method getPath (line 105) | public String getPath() {
    method isPathDefinite (line 112) | public static boolean isPathDefinite(String path) {
    method isDefinite (line 138) | public boolean isDefinite() {
    method read (line 151) | @SuppressWarnings({"unchecked"})
    method read (line 166) | @SuppressWarnings("unchecked")
    method set (line 218) | public <T> T set(Object jsonObject, Object newVal, Configuration confi...
    method map (line 245) | public <T> T map(Object jsonObject, MapFunction mapFunction, Configura...
    method delete (line 273) | public <T> T delete(Object jsonObject, Configuration configuration) {
    method add (line 300) | public <T> T add(Object jsonObject, Object value, Configuration config...
    method put (line 328) | public <T> T put(Object jsonObject, String key, Object value, Configur...
    method renameKey (line 347) | public <T> T renameKey(Object jsonObject, String oldKeyName, String ne...
    method read (line 375) | @SuppressWarnings({"unchecked"})
    method read (line 388) | @SuppressWarnings({"unchecked"})
    method read (line 404) | @SuppressWarnings({"unchecked"})
    method read (line 417) | @SuppressWarnings({"unchecked"})
    method read (line 432) | @SuppressWarnings({"unchecked"})
    method read (line 455) | @SuppressWarnings({"unchecked"})
    method read (line 469) | @SuppressWarnings({"unchecked"})
    method read (line 486) | @SuppressWarnings({"unchecked"})
    method compile (line 512) | public static JsonPath compile(String jsonPath, Predicate... filters) {
    method read (line 534) | @SuppressWarnings({"unchecked"})
    method read (line 548) | @SuppressWarnings({"unchecked"})
    method read (line 563) | @SuppressWarnings({"unchecked"})
    method read (line 578) | @SuppressWarnings({"unchecked"})
    method read (line 592) | @SuppressWarnings({"unchecked"})
    method using (line 613) | public static ParseContext using(Configuration configuration) {
    method using (line 623) | @Deprecated
    method parse (line 635) | public static DocumentContext parse(Object json) {
    method parse (line 646) | public static DocumentContext parse(String json) {
    method parse (line 657) | public static DocumentContext parse(InputStream json) {
    method parse (line 668) | public static DocumentContext parse(File json) throws IOException {
    method parse (line 679) | @Deprecated
    method parse (line 691) | public static DocumentContext parse(Object json, Configuration configu...
    method parse (line 702) | public static DocumentContext parse(String json, Configuration configu...
    method parse (line 713) | public static DocumentContext parse(InputStream json, Configuration co...
    method parse (line 724) | public static DocumentContext parse(File json, Configuration configura...
    method parse (line 735) | @Deprecated
    method resultByConfiguration (line 740) | private <T> T resultByConfiguration(Object jsonObject, Configuration c...
    method handleMissingPathInContext (line 748) | private <T> T handleMissingPathInContext(final Configuration configura...

FILE: json-path/src/main/java/com/jayway/jsonpath/JsonPathException.java
  class JsonPathException (line 17) | public class JsonPathException extends RuntimeException {
    method JsonPathException (line 19) | public JsonPathException() {
    method JsonPathException (line 22) | public JsonPathException(String message) {
    method JsonPathException (line 26) | public JsonPathException(String message, Throwable cause) {
    method JsonPathException (line 30) | public JsonPathException(Throwable cause) {

FILE: json-path/src/main/java/com/jayway/jsonpath/MapFunction.java
  type MapFunction (line 21) | public interface MapFunction {
    method map (line 22) | Object map(Object currentValue, Configuration configuration);

FILE: json-path/src/main/java/com/jayway/jsonpath/Option.java
  type Option (line 17) | public enum Option {

FILE: json-path/src/main/java/com/jayway/jsonpath/ParseContext.java
  type ParseContext (line 26) | public interface ParseContext {
    method parse (line 28) | DocumentContext parse(String json);
    method parse (line 30) | DocumentContext parse(Object json);
    method parse (line 32) | DocumentContext parse(InputStream json);
    method parse (line 34) | DocumentContext parse(InputStream json, String charset);
    method parse (line 36) | DocumentContext parse(File json) throws IOException;
    method parseUtf8 (line 38) | DocumentContext parseUtf8(byte[] json);
    method parse (line 40) | @Deprecated

FILE: json-path/src/main/java/com/jayway/jsonpath/PathNotFoundException.java
  class PathNotFoundException (line 17) | public class PathNotFoundException extends InvalidPathException {
    method PathNotFoundException (line 19) | public PathNotFoundException() {
    method PathNotFoundException (line 22) | public PathNotFoundException(String message) {
    method PathNotFoundException (line 26) | public PathNotFoundException(String message, Throwable cause) {
    method PathNotFoundException (line 30) | public PathNotFoundException(Throwable cause) {
    method fillInStackTrace (line 34) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/Predicate.java
  type Predicate (line 22) | public interface Predicate {
    method apply (line 24) | boolean apply(PredicateContext ctx);
    type PredicateContext (line 26) | public interface PredicateContext {
      method item (line 32) | Object item();
      method item (line 39) | <T> T item(Class<T> clazz) throws MappingException;
      method root (line 45) | Object root();
      method configuration (line 51) | Configuration configuration();

FILE: json-path/src/main/java/com/jayway/jsonpath/ReadContext.java
  type ReadContext (line 17) | public interface ReadContext {
    method configuration (line 24) | Configuration configuration();
    method json (line 31) | <T> T json();
    method jsonString (line 38) | String jsonString();
    method read (line 48) | <T> T read(String path, Predicate... filters);
    method read (line 59) | <T> T read(String path, Class<T> type, Predicate... filters);
    method read (line 68) | <T> T read(JsonPath path);
    method read (line 78) | <T> T read(JsonPath path, Class<T> type);
    method read (line 93) | <T> T read(JsonPath path, TypeRef<T> typeRef);
    method read (line 108) | <T> T read(String path, TypeRef<T> typeRef);
    method limit (line 115) | ReadContext limit(int maxResults);
    method withListeners (line 122) | ReadContext withListeners(EvaluationListener... listener);

FILE: json-path/src/main/java/com/jayway/jsonpath/TypeRef.java
  class TypeRef (line 30) | public abstract class TypeRef<T> implements Comparable<TypeRef<T>> {
    method TypeRef (line 33) | protected TypeRef()
    method getType (line 42) | public Type getType() { return type; }
    method compareTo (line 49) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/ValueCompareException.java
  class ValueCompareException (line 17) | public class ValueCompareException extends JsonPathException {
    method ValueCompareException (line 19) | public ValueCompareException() {
    method ValueCompareException (line 28) | public ValueCompareException(final Object left, final Object right) {
    method ValueCompareException (line 32) | public ValueCompareException(String message) {
    method ValueCompareException (line 36) | public ValueCompareException(String message, Throwable cause) {

FILE: json-path/src/main/java/com/jayway/jsonpath/WriteContext.java
  type WriteContext (line 17) | public interface WriteContext {
    method configuration (line 24) | Configuration configuration();
    method json (line 31) | <T> T json();
    method jsonString (line 38) | String jsonString();
    method set (line 48) | DocumentContext set(String path, Object newValue, Predicate... filters);
    method set (line 57) | DocumentContext set(JsonPath path, Object newValue);
    method map (line 67) | DocumentContext map(String path, MapFunction mapFunction, Predicate......
    method map (line 76) | DocumentContext map(JsonPath path, MapFunction mapFunction);
    method delete (line 85) | DocumentContext delete(String path, Predicate... filters);
    method delete (line 93) | DocumentContext delete(JsonPath path);
    method add (line 116) | DocumentContext add(String path, Object value, Predicate... filters);
    method add (line 125) | DocumentContext add(JsonPath path, Object value);
    method put (line 136) | DocumentContext put(String path, String key, Object value, Predicate.....
    method put (line 146) | DocumentContext put(JsonPath path, String key, Object value);
    method renameKey (line 157) | DocumentContext renameKey(String path, String oldKeyName, String newKe...
    method renameKey (line 167) | DocumentContext renameKey(JsonPath path, String oldKeyName, String new...

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/CharacterIndex.java
  class CharacterIndex (line 5) | public class CharacterIndex {
    method CharacterIndex (line 26) | public CharacterIndex(CharSequence charSequence) {
    method length (line 32) | public int length() {
    method charAt (line 36) | public char charAt(int idx) {
    method currentChar (line 40) | public char currentChar() {
    method currentCharIs (line 44) | public boolean currentCharIs(char c) {
    method lastCharIs (line 48) | public boolean lastCharIs(char c) {
    method nextCharIs (line 52) | public boolean nextCharIs(char c) {
    method incrementPosition (line 56) | public int incrementPosition(int charCount) {
    method decrementEndPosition (line 60) | public int decrementEndPosition(int charCount) {
    method setPosition (line 64) | public int setPosition(int newPosition) {
    method setEndPosition (line 70) | private int setEndPosition(int newPosition) {
    method position (line 75) | public int position(){
    method indexOfClosingSquareBracket (line 79) | public int indexOfClosingSquareBracket(int startPosition) {
    method indexOfMatchingCloseChar (line 90) | public int indexOfMatchingCloseChar(int startPosition, char openChar, ...
    method indexOfClosingBracket (line 131) | public int indexOfClosingBracket(int startPosition, boolean skipString...
    method indexOfNextSignificantChar (line 135) | public int indexOfNextSignificantChar(char c) {
    method indexOfNextSignificantChar (line 139) | public int indexOfNextSignificantChar(int startPosition, char c) {
    method nextIndexOf (line 151) | public int nextIndexOf(char c) {
    method nextIndexOf (line 155) | public int nextIndexOf(int startPosition, char c) {
    method nextIndexOfUnescaped (line 166) | public int nextIndexOfUnescaped(char c) {
    method nextIndexOfUnescaped (line 170) | public int nextIndexOfUnescaped(int startPosition, char c) {
    method charAtOr (line 187) | public char charAtOr(int postition, char defaultChar){
    method nextSignificantCharIs (line 192) | public boolean nextSignificantCharIs(int startPosition, char c) {
    method nextSignificantCharIs (line 200) | public boolean nextSignificantCharIs(char c) {
    method nextSignificantChar (line 204) | public char nextSignificantChar() {
    method nextSignificantChar (line 208) | public char nextSignificantChar(int startPosition) {
    method readSignificantChar (line 220) | public void readSignificantChar(char c) {
    method hasSignificantSubSequence (line 227) | public boolean hasSignificantSubSequence(CharSequence s) {
    method indexOfPreviousSignificantChar (line 240) | public int indexOfPreviousSignificantChar(int startPosition){
    method indexOfPreviousSignificantChar (line 252) | public int indexOfPreviousSignificantChar(){
    method previousSignificantChar (line 256) | public char previousSignificantChar(int startPosition) {
    method previousSignificantChar (line 262) | public char previousSignificantChar() {
    method currentIsTail (line 266) | public boolean currentIsTail() {
    method hasMoreCharacters (line 270) | public boolean hasMoreCharacters() {
    method inBounds (line 274) | public boolean inBounds(int idx) {
    method inBounds (line 277) | public boolean inBounds() {
    method isOutOfBounds (line 281) | public boolean isOutOfBounds(int idx) {
    method subSequence (line 285) | public CharSequence subSequence(int start, int end) {
    method charSequence (line 289) | public CharSequence charSequence() {
    method toString (line 293) | @Override
    method isNumberCharacter (line 298) | public boolean isNumberCharacter(int readPosition) {
    method skipBlanks (line 304) | public CharacterIndex skipBlanks() {
    method skipBlanksAtEnd (line 311) | private CharacterIndex skipBlanksAtEnd() {
    method trim (line 318) | public CharacterIndex trim() {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/DefaultsImpl.java
  class DefaultsImpl (line 13) | public final class DefaultsImpl implements Defaults {
    method jsonProvider (line 19) | @Override
    method options (line 24) | @Override
    method mappingProvider (line 29) | @Override
    method DefaultsImpl (line 34) | private DefaultsImpl() {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/EvaluationAbortException.java
  class EvaluationAbortException (line 3) | public class EvaluationAbortException extends RuntimeException {
    method fillInStackTrace (line 9) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/EvaluationContext.java
  type EvaluationContext (line 22) | public interface EvaluationContext {
    method configuration (line 28) | Configuration configuration();
    method rootDocument (line 35) | Object rootDocument();
    method getValue (line 44) | <T> T getValue();
    method getValue (line 53) | <T> T getValue(boolean unwrap);
    method getPath (line 61) | <T> T getPath();
    method getPathList (line 69) | List<String> getPathList();
    method updateOperations (line 71) | Collection<PathRef> updateOperations();

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java
  class JsonContext (line 39) | public class JsonContext implements DocumentContext {
    method JsonContext (line 46) | JsonContext(Object json, Configuration configuration) {
    method configuration (line 54) | @Override
    method json (line 64) | @Override
    method jsonString (line 69) | @Override
    method read (line 74) | @Override
    method read (line 80) | @Override
    method read (line 85) | @Override
    method read (line 91) | @Override
    method read (line 96) | @Override
    method read (line 101) | @Override
    method limit (line 106) | @Override
    method withListeners (line 111) | @Override
    method convert (line 116) | private <T> T convert(Object obj, Class<T> targetType, Configuration c...
    method convert (line 120) | private <T> T convert(Object obj, TypeRef<T> targetType, Configuration...
    method set (line 124) | @Override
    method set (line 129) | @Override
    method map (line 140) | @Override
    method map (line 146) | @Override
    method delete (line 152) | @Override
    method delete (line 157) | @Override
    method add (line 168) | @Override
    method add (line 173) | @Override
    method put (line 184) | @Override
    method renameKey (line 189) | @Override
    method renameKey (line 194) | @Override
    method put (line 205) | @Override
    method pathFromCache (line 216) | private JsonPath pathFromCache(String path, Predicate[] filters) {
    class LimitingEvaluationListener (line 228) | private final static class LimitingEvaluationListener implements Evalu...
      method LimitingEvaluationListener (line 231) | private LimitingEvaluationListener(int limit) {
      method resultFound (line 235) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/JsonFormatter.java
  class JsonFormatter (line 17) | public class JsonFormatter {
    method appendIndent (line 29) | private static void appendIndent(StringBuilder sb, int count) {
    method prettyPrint (line 33) | public static String prettyPrint(String input) {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/ParseContextImpl.java
  class ParseContextImpl (line 16) | public class ParseContextImpl implements ParseContext {
    method ParseContextImpl (line 20) | public ParseContextImpl() {
    method ParseContextImpl (line 24) | public ParseContextImpl(Configuration configuration) {
    method parse (line 28) | @Override
    method parse (line 34) | @Override
    method parseUtf8 (line 41) | @Override
    method parse (line 48) | @Override
    method parse (line 53) | @Override
    method parse (line 65) | @Override
    method parse (line 77) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/Path.java
  type Path (line 22) | public interface Path {
    method evaluate (line 33) | EvaluationContext evaluate(Object document, Object rootDocument, Confi...
    method evaluate (line 44) | EvaluationContext evaluate(Object document, Object rootDocument, Confi...
    method isDefinite (line 50) | boolean isDefinite();
    method isFunctionPath (line 56) | boolean isFunctionPath();
    method isRootPath (line 62) | boolean isRootPath();

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/PathRef.java
  class PathRef (line 11) | public abstract class PathRef implements Comparable<PathRef>  {
    method getAccessor (line 14) | @Override
    method set (line 19) | @Override
    method convert (line 22) | @Override
    method delete (line 25) | @Override
    method add (line 28) | @Override
    method put (line 31) | @Override
    method renameKey (line 34) | @Override
    method PathRef (line 42) | private PathRef(Object parent) {
    method getAccessor (line 46) | abstract Object getAccessor();
    method set (line 48) | public abstract void set(Object newVal, Configuration configuration);
    method convert (line 50) | public abstract void convert(MapFunction mapFunction, Configuration co...
    method delete (line 52) | public abstract void delete(Configuration configuration);
    method add (line 54) | public abstract void add(Object newVal, Configuration configuration);
    method put (line 56) | public abstract void put(String key, Object newVal, Configuration conf...
    method renameKey (line 58) | public abstract void renameKey(String oldKey,String newKeyName, Config...
    method renameInMap (line 60) | protected void renameInMap(Object targetMap, String oldKeyName, String...
    method targetInvalid (line 72) | protected boolean targetInvalid(Object target){
    method compareTo (line 76) | @Override
    method create (line 81) | public static PathRef create(Object obj, String property){
    method create (line 85) | public static PathRef create(Object obj, Collection<String> properties){
    method create (line 89) | public static PathRef create(Object array, int index){
    method createRoot (line 93) | public static PathRef createRoot(Object root){
    class RootPathRef (line 97) | private static class RootPathRef extends PathRef {
      method RootPathRef (line 99) | private RootPathRef(Object parent) {
      method getAccessor (line 103) | @Override
      method set (line 108) | @Override
      method convert (line 113) | public void convert(MapFunction mapFunction, Configuration configura...
      method delete (line 117) | @Override
      method add (line 122) | @Override
      method put (line 131) | @Override
      method renameKey (line 140) | @Override
    class ArrayIndexPathRef (line 151) | private static class ArrayIndexPathRef extends PathRef {
      method ArrayIndexPathRef (line 155) | private ArrayIndexPathRef(Object parent, int index) {
      method set (line 160) | public void set(Object newVal, Configuration configuration){
      method convert (line 164) | public void convert(MapFunction mapFunction, Configuration configura...
      method delete (line 169) | public void delete(Configuration configuration){
      method add (line 173) | public void add(Object value, Configuration configuration){
      method put (line 185) | public void put(String key, Object value, Configuration configuration){
      method renameKey (line 197) | @Override
      method getAccessor (line 206) | @Override
      method compareTo (line 211) | @Override
    class ObjectPropertyPathRef (line 221) | private static class ObjectPropertyPathRef extends PathRef {
      method ObjectPropertyPathRef (line 225) | private ObjectPropertyPathRef(Object parent, String property) {
      method set (line 230) | public void set(Object newVal, Configuration configuration){
      method convert (line 234) | @Override
      method delete (line 241) | public void delete(Configuration configuration){
      method add (line 245) | public void add(Object value, Configuration configuration){
      method put (line 257) | public void put(String key, Object value, Configuration configuration){
      method renameKey (line 269) | @Override
      method getAccessor (line 278) | @Override
    class ObjectMultiPropertyPathRef (line 284) | private static class ObjectMultiPropertyPathRef extends PathRef {
      method ObjectMultiPropertyPathRef (line 288) | private ObjectMultiPropertyPathRef(Object parent, Collection<String>...
      method set (line 293) | public void set(Object newVal, Configuration configuration){
      method convert (line 298) | public void convert(MapFunction mapFunction, Configuration configura...
      method delete (line 307) | public void delete(Configuration configuration){
      method add (line 313) | @Override
      method put (line 318) | @Override
      method renameKey (line 323) | @Override
      method getAccessor (line 328) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/Utils.java
  class Utils (line 24) | public final class Utils {
    method join (line 27) | public static String join(String delimiter, String wrap, Iterable<?> o...
    method join (line 41) | public static String join(String delimiter, Iterable<?> objs) {
    method concat (line 45) | public static String concat(CharSequence... strings) {
    method closeQuietly (line 87) | public static void closeQuietly(Closeable closeable) {
    method escape (line 96) | public static String escape(String str, boolean escapeSingleQuote) {
    method unescape (line 172) | public static String unescape(String str) {
    method hex (line 254) | public static String hex(char ch) {
    method isEmpty (line 277) | public static boolean isEmpty(CharSequence cs) {
    method indexOf (line 289) | static int indexOf(CharSequence cs, CharSequence searchChar, int start) {
    method notNull (line 313) | public static <T> T notNull(T object, String message) {
    method notNull (line 333) | public static <T> T notNull(T object, String message, Object... values) {
    method isTrue (line 355) | public static void isTrue(boolean expression, String message) {
    method onlyOneIsTrue (line 369) | public static void onlyOneIsTrue(final String message, final boolean.....
    method onlyOneIsTrueNonThrow (line 375) | public static boolean onlyOneIsTrueNonThrow(final boolean... expressio...
    method notEmpty (line 399) | public static <T extends CharSequence> T notEmpty(T chars, String mess...
    method notEmpty (line 419) | public static byte[] notEmpty(byte[] bytes, String message) {
    method notEmpty (line 441) | public static <T extends CharSequence> T notEmpty(T chars, String mess...
    method toString (line 454) | public static String toString(Object o) {
    method Utils (line 461) | private Utils() {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/filter/Evaluator.java
  type Evaluator (line 5) | public interface Evaluator {
    method evaluate (line 6) | boolean evaluate(ValueNode left, ValueNode right, Predicate.PredicateC...

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java
  class EvaluatorFactory (line 14) | public class EvaluatorFactory {
    method createEvaluator (line 42) | public static Evaluator createEvaluator(RelationalOperator operator){
    class ExistsEvaluator (line 46) | private static class ExistsEvaluator implements Evaluator {
      method evaluate (line 47) | @Override
    class NotEqualsEvaluator (line 56) | private static class NotEqualsEvaluator implements Evaluator {
      method evaluate (line 57) | @Override
    class TypeSafeNotEqualsEvaluator (line 63) | private static class TypeSafeNotEqualsEvaluator implements Evaluator {
      method evaluate (line 64) | @Override
    class EqualsEvaluator (line 70) | private static class EqualsEvaluator implements Evaluator {
      method evaluate (line 71) | @Override
    class TypeSafeEqualsEvaluator (line 81) | private static class TypeSafeEqualsEvaluator implements Evaluator {
      method evaluate (line 82) | @Override
    class TypeEvaluator (line 91) | private static class TypeEvaluator implements Evaluator {
      method evaluate (line 92) | @Override
    class LessThanEvaluator (line 98) | private static class LessThanEvaluator implements Evaluator {
      method evaluate (line 99) | @Override
    class LessThanEqualsEvaluator (line 112) | private static class LessThanEqualsEvaluator implements Evaluator {
      method evaluate (line 113) | @Override
    class GreaterThanEvaluator (line 126) | private static class GreaterThanEvaluator implements Evaluator {
      method evaluate (line 127) | @Override
    class GreaterThanEqualsEvaluator (line 140) | private static class GreaterThanEqualsEvaluator implements Evaluator {
      method evaluate (line 141) | @Override
    class SizeEvaluator (line 154) | private static class SizeEvaluator implements Evaluator {
      method evaluate (line 155) | @Override
    class EmptyEvaluator (line 171) | private static class EmptyEvaluator implements Evaluator {
      method evaluate (line 172) | @Override
    class InEvaluator (line 183) | private static class InEvaluator implements Evaluator {
      method evaluate (line 184) | @Override
    class NotInEvaluator (line 201) | private static class NotInEvaluator implements Evaluator {
      method evaluate (line 202) | @Override
    class AllEvaluator (line 208) | private static class AllEvaluator implements Evaluator {
      method evaluate (line 209) | @Override
    class ContainsEvaluator (line 229) | private static class ContainsEvaluator implements Evaluator {
      method evaluate (line 230) | @Override
    class PredicateMatchEvaluator (line 246) | private static class PredicateMatchEvaluator implements Evaluator {
      method evaluate (line 247) | @Override
    class RegexpEvaluator (line 253) | private static class RegexpEvaluator implements Evaluator {
      method evaluate (line 254) | @Override
      method matches (line 275) | private boolean matches(PatternNode patternNode, String inputToMatch) {
      method matchesAny (line 279) | private boolean matchesAny(PatternNode patternNode, ValueNode valueN...
      method getInput (line 296) | private String getInput(ValueNode valueNode) {
    class SubsetOfEvaluator (line 309) | private static class SubsetOfEvaluator implements Evaluator {
      method evaluate (line 310) | @Override
    class AnyOfEvaluator (line 338) | private static class AnyOfEvaluator implements Evaluator {
      method evaluate (line 339) | @Override
    class NoneOfEvaluator (line 375) | private static class NoneOfEvaluator implements Evaluator {
      method evaluate (line 376) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/filter/ExpressionNode.java
  class ExpressionNode (line 5) | public abstract class ExpressionNode implements Predicate {
    method createExpressionNode (line 7) | public static ExpressionNode createExpressionNode(ExpressionNode right...

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/filter/FilterCompiler.java
  class FilterCompiler (line 14) | public class FilterCompiler  {
    method compile (line 52) | public static Filter compile(String filterString) {
    method FilterCompiler (line 57) | private FilterCompiler(String filterString) {
    method compile (line 76) | public Predicate compile() {
    method readValueNode (line 93) | private ValueNode readValueNode() {
    method readLiteral (line 108) | private ValueNode readLiteral(){
    method readLogicalOR (line 130) | private ExpressionNode readLogicalOR() {
    method readLogicalAND (line 147) | private ExpressionNode readLogicalAND() {
    method readLogicalANDOperand (line 165) | private ExpressionNode readLogicalANDOperand() {
    method readExpression (line 189) | private RelationalExpressionNode readExpression() {
    method readLogicalOperator (line 208) | private LogicalOperator readLogicalOperator(){
    method readRelationalOperator (line 225) | private RelationalOperator readRelationalOperator() {
    method readNullLiteral (line 243) | private NullNode readNullLiteral() {
    method readJsonLiteral (line 256) | private JsonNode readJsonLiteral(){
    method endOfFlags (line 277) | private int endOfFlags(int position) {
    method readPattern (line 291) | private PatternNode readPattern() {
    method readStringLiteral (line 311) | private StringNode readStringLiteral(char endChar) {
    method readNumberLiteral (line 325) | private NumberNode readNumberLiteral() {
    method readBooleanLiteral (line 336) | private BooleanNode readBooleanLiteral() {
    method readPath (line 353) | private PathNode readPath() {
    method expressionIsTerminated (line 382) | private boolean expressionIsTerminated(){
    method currentCharIsClosingFunctionBracket (line 394) | private boolean currentCharIsClosingFunctionBracket(int lowerBound){
    method isLogicalOperatorChar (line 412) | private boolean isLogicalOperatorChar(char c) {
    method isRelationalOperatorChar (line 416) | private boolean isRelationalOperatorChar(char c) {
    class CompiledFilter (line 420) | private static final class CompiledFilter extends Filter {
      method CompiledFilter (line 424) | private CompiledFilter(Predicate predicate) {
      method apply (line 428) | @Override
      method toString (line 433) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/filter/LogicalExpressionNode.java
  class LogicalExpressionNode (line 9) | public class LogicalExpressionNode extends ExpressionNode {
    method createLogicalNot (line 13) | public static ExpressionNode createLogicalNot(ExpressionNode op) {
    method createLogicalOr (line 17) | public static LogicalExpressionNode createLogicalOr(ExpressionNode lef...
    method createLogicalOr (line 21) | public static LogicalExpressionNode createLogicalOr(Collection<Express...
    method createLogicalAnd (line 25) | public static LogicalExpressionNode createLogicalAnd(ExpressionNode le...
    method createLogicalAnd (line 29) | public static LogicalExpressionNode createLogicalAnd(Collection<Expres...
    method LogicalExpressionNode (line 33) | private LogicalExpressionNode(ExpressionNode left, LogicalOperator ope...
    method LogicalExpressionNode (line 39) | private LogicalExpressionNode(LogicalOperator operator, Collection<Exp...
    method and (line 44) | public LogicalExpressionNode and(LogicalExpressionNode other){
    method or (line 48) | public LogicalExpressionNode or(LogicalExpressionNode other){
    method getOperator (line 52) | public LogicalOperator getOperator() {
    method append (line 56) | public LogicalExpressionNode append(ExpressionNode expressionNode) {
    method toString (line 61) | @Override
    method apply (line 66) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/filter/LogicalOperator.java
  type LogicalOperator (line 5) | public enum LogicalOperator {
    method LogicalOperator (line 13) | LogicalOperator(String operatorString) {
    method getOperatorString (line 17) | public String getOperatorString() {
    method toString (line 21) | @Override
    method fromString (line 26) | public static LogicalOperator fromString(String operatorString){

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/filter/PatternFlag.java
  type PatternFlag (line 5) | public enum PatternFlag {
    method PatternFlag (line 17) | private PatternFlag(int code, char flag) {
    method parseFlags (line 22) | public static int parseFlags(char[] flags) {
    method parseFlags (line 30) | public static String parseFlags(int flags) {
    method getCodeByFlag (line 40) | private static int getCodeByFlag(char flag) {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/filter/RelationalExpressionNode.java
  class RelationalExpressionNode (line 6) | public class RelationalExpressionNode extends ExpressionNode {
    method RelationalExpressionNode (line 14) | public RelationalExpressionNode(ValueNode left, RelationalOperator rel...
    method toString (line 22) | @Override
    method apply (line 31) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/filter/RelationalOperator.java
  type RelationalOperator (line 7) | public enum RelationalOperator {
    method RelationalOperator (line 41) | RelationalOperator(String operatorString) {
    method fromString (line 45) | public static RelationalOperator fromString(String operatorString) {
    method toString (line 55) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNode.java
  class ValueNode (line 15) | public abstract class ValueNode {
    method type (line 17) | public abstract Class<?> type(Predicate.PredicateContext ctx);
    method isPatternNode (line 19) | public boolean isPatternNode() {
    method asPatternNode (line 23) | public PatternNode asPatternNode() {
    method isPathNode (line 27) | public boolean isPathNode() {
    method asPathNode (line 31) | public PathNode asPathNode() {
    method isNumberNode (line 35) | public boolean isNumberNode() {
    method asNumberNode (line 39) | public NumberNode asNumberNode() {
    method isStringNode (line 43) | public boolean isStringNode() {
    method asStringNode (line 47) | public StringNode asStringNode() {
    method isBooleanNode (line 51) | public boolean isBooleanNode() {
    method asBooleanNode (line 55) | public BooleanNode asBooleanNode() {
    method isJsonNode (line 59) | public boolean isJsonNode() {
    method asJsonNode (line 63) | public JsonNode asJsonNode() {
    method isPredicateNode (line 67) | public boolean isPredicateNode() {
    method asPredicateNode (line 71) | public PredicateNode asPredicateNode() {
    method isValueListNode (line 75) | public boolean isValueListNode() {
    method asValueListNode (line 79) | public ValueListNode asValueListNode() {
    method isNullNode (line 83) | public boolean isNullNode() {
    method asNullNode (line 87) | public NullNode asNullNode() {
    method asUndefinedNode (line 91) | public UndefinedNode asUndefinedNode() {
    method isUndefinedNode (line 95) | public boolean isUndefinedNode() {
    method isClassNode (line 99) | public boolean isClassNode() {
    method asClassNode (line 103) | public ClassNode asClassNode() {
    method isOffsetDateTimeNode (line 108) | public boolean isOffsetDateTimeNode(){
    method asOffsetDateTimeNode (line 112) | public OffsetDateTimeNode asOffsetDateTimeNode(){
    method isPath (line 117) | private static boolean isPath(Object o) {
    method isJson (line 137) | private static boolean isJson(Object o) {
    method toValueNode (line 165) | public static ValueNode toValueNode(Object o){
    method createStringNode (line 182) | public static StringNode createStringNode(CharSequence charSequence, b...
    method createClassNode (line 186) | public static ClassNode createClassNode(Class<?> clazz){
    method createNumberNode (line 190) | public static NumberNode createNumberNode(CharSequence charSequence){
    method createBooleanNode (line 194) | public static BooleanNode createBooleanNode(CharSequence charSequence){
    method createNullNode (line 198) | public static NullNode createNullNode(){
    method createJsonNode (line 202) | public static JsonNode createJsonNode(CharSequence json) {
    method createJsonNode (line 206) | public static JsonNode createJsonNode(Object parsedJson) {
    method createPatternNode (line 210) | public static PatternNode createPatternNode(CharSequence pattern) {
    method createPatternNode (line 214) | public static PatternNode createPatternNode(Pattern pattern) {
    method createOffsetDateTimeNode (line 219) | public static OffsetDateTimeNode createOffsetDateTimeNode(CharSequence...
    method createUndefinedNode (line 224) | public static UndefinedNode createUndefinedNode() {
    method createPathNode (line 228) | public static PathNode createPathNode(CharSequence path, boolean exist...
    method createPathNode (line 232) | public static ValueNode createPathNode(Path path) {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNodes.java
  type ValueNodes (line 31) | public interface ValueNodes {
    class PatternNode (line 43) | class PatternNode extends ValueNode {
      method PatternNode (line 48) | PatternNode(CharSequence charSequence) {
      method PatternNode (line 58) | PatternNode(Pattern pattern) {
      method getCompiledPattern (line 65) | Pattern getCompiledPattern() {
      method type (line 69) | @Override
      method isPatternNode (line 74) | public boolean isPatternNode() {
      method asPatternNode (line 78) | public PatternNode asPatternNode() {
      method toString (line 82) | @Override
      method equals (line 92) | @Override
    class JsonNode (line 104) | class JsonNode extends ValueNode {
      method JsonNode (line 108) | JsonNode(CharSequence charSequence) {
      method JsonNode (line 113) | JsonNode(Object parsedJson) {
      method type (line 118) | @Override
      method isJsonNode (line 128) | public boolean isJsonNode() {
      method asJsonNode (line 132) | public JsonNode asJsonNode() {
      method asValueListNode (line 136) | public ValueNode asValueListNode(Predicate.PredicateContext ctx){
      method parse (line 144) | public Object parse(Predicate.PredicateContext ctx){
      method isParsed (line 152) | public boolean isParsed() {
      method getJson (line 156) | public Object getJson() {
      method isArray (line 160) | public boolean isArray(Predicate.PredicateContext ctx) {
      method isMap (line 164) | public boolean isMap(Predicate.PredicateContext ctx) {
      method length (line 168) | public int length(Predicate.PredicateContext ctx) {
      method isEmpty (line 172) | public boolean isEmpty(Predicate.PredicateContext ctx) {
      method toString (line 178) | @Override
      method equals (line 183) | public boolean equals(JsonNode jsonNode, Predicate.PredicateContext ...
      method equals (line 188) | @Override
    class StringNode (line 199) | class StringNode extends ValueNode {
      method StringNode (line 203) | StringNode(CharSequence charSequence, boolean escape) {
      method asNumberNode (line 219) | @Override
      method getString (line 230) | public String getString() {
      method length (line 234) | public int length(){
      method isEmpty (line 238) | public boolean isEmpty(){
      method contains (line 242) | public boolean contains(String str) {
      method type (line 246) | @Override
      method isStringNode (line 251) | public boolean isStringNode() {
      method asStringNode (line 255) | public StringNode asStringNode() {
      method toString (line 259) | @Override
      method equals (line 265) | @Override
    class NumberNode (line 277) | class NumberNode extends ValueNode {
      method NumberNode (line 283) | NumberNode(BigDecimal number) {
      method NumberNode (line 286) | NumberNode(CharSequence num) {
      method asStringNode (line 290) | @Override
      method getNumber (line 295) | public BigDecimal getNumber() {
      method type (line 299) | @Override
      method isNumberNode (line 304) | public boolean isNumberNode() {
      method asNumberNode (line 308) | public NumberNode asNumberNode() {
      method toString (line 312) | @Override
      method equals (line 317) | @Override
    class OffsetDateTimeNode (line 333) | class OffsetDateTimeNode extends ValueNode {
      method OffsetDateTimeNode (line 338) | OffsetDateTimeNode(OffsetDateTime dateTime) {
      method OffsetDateTimeNode (line 342) | OffsetDateTimeNode(CharSequence date) {
      method asStringNode (line 346) | @Override
      method getDate (line 351) | public OffsetDateTime getDate() {
      method type (line 355) | @Override
      method isOffsetDateTimeNode (line 360) | public boolean isOffsetDateTimeNode() {
      method asOffsetDateTimeNode (line 364) | public OffsetDateTimeNode asOffsetDateTimeNode() {
      method toString (line 368) | @Override
      method equals (line 373) | @Override
    class BooleanNode (line 384) | class BooleanNode extends ValueNode {
      method BooleanNode (line 387) | private BooleanNode(CharSequence boolValue) {
      method type (line 391) | @Override
      method isBooleanNode (line 396) | public boolean isBooleanNode() {
      method asBooleanNode (line 400) | public BooleanNode asBooleanNode() {
      method getBoolean (line 404) | public boolean getBoolean() {
      method toString (line 408) | @Override
      method equals (line 413) | @Override
    class ClassNode (line 428) | class ClassNode extends ValueNode {
      method ClassNode (line 431) | ClassNode(Class clazz) {
      method type (line 435) | @Override
      method isClassNode (line 440) | public boolean isClassNode() {
      method asClassNode (line 444) | public ClassNode asClassNode() {
      method getClazz (line 448) | public Class getClazz() {
      method toString (line 452) | @Override
      method equals (line 457) | @Override
    class NullNode (line 468) | class NullNode extends ValueNode {
      method NullNode (line 470) | private NullNode() {}
      method type (line 472) | @Override
      method isNullNode (line 477) | @Override
      method asNullNode (line 482) | @Override
      method toString (line 487) | @Override
      method equals (line 492) | @Override
    class UndefinedNode (line 501) | class UndefinedNode extends ValueNode {
      method type (line 503) | @Override
      method asUndefinedNode (line 508) | public UndefinedNode asUndefinedNode() {
      method isUndefinedNode (line 512) | public boolean isUndefinedNode() {
      method equals (line 516) | @Override
    class PredicateNode (line 522) | class PredicateNode extends ValueNode {
      method PredicateNode (line 526) | public PredicateNode(Predicate predicate) {
      method getPredicate (line 530) | public Predicate getPredicate() {
      method asPredicateNode (line 534) | public PredicateNode asPredicateNode() {
      method type (line 538) | @Override
      method isPredicateNode (line 543) | public boolean isPredicateNode() {
      method equals (line 547) | @Override
      method toString (line 552) | @Override
    class ValueListNode (line 558) | class ValueListNode extends ValueNode implements Iterable<ValueNode> {
      method ValueListNode (line 562) | public ValueListNode(Collection<?> values) {
      method contains (line 568) | public boolean contains(ValueNode node){
      method subsetof (line 572) | public boolean subsetof(ValueListNode right) {
      method getNodes (line 581) | public List<ValueNode> getNodes() {
      method type (line 585) | @Override
      method isValueListNode (line 590) | public boolean isValueListNode() {
      method asValueListNode (line 594) | public ValueListNode asValueListNode() {
      method toString (line 598) | @Override
      method equals (line 603) | @Override
      method iterator (line 613) | @Override
    class PathNode (line 619) | class PathNode extends ValueNode {
      method PathNode (line 627) | PathNode(Path path) {
      method PathNode (line 631) | PathNode(CharSequence charSequence, boolean existsCheck, boolean sho...
      method PathNode (line 635) | PathNode(Path path, boolean existsCheck, boolean shouldExist) {
      method getPath (line 642) | public Path getPath() {
      method isExistsCheck (line 646) | public boolean isExistsCheck() {
      method shouldExists (line 650) | public boolean shouldExists() {
      method type (line 654) | @Override
      method isPathNode (line 659) | public boolean isPathNode() {
      method asPathNode (line 663) | public PathNode asPathNode() {
      method asExistsCheck (line 667) | public PathNode asExistsCheck(boolean shouldExist) {
      method toString (line 671) | @Override
      method evaluate (line 676) | public ValueNode evaluate(Predicate.PredicateContext ctx) {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/ParamType.java
  type ParamType (line 6) | public enum ParamType {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/Parameter.java
  class Parameter (line 14) | public class Parameter {
    method Parameter (line 21) | public Parameter() {}
    method Parameter (line 23) | public Parameter(String json) {
    method Parameter (line 28) | public Parameter(Path path) {
    method getValue (line 33) | public Object getValue() {
    method setLateBinding (line 37) | public void setLateBinding(ILateBindingValue lateBinding) {
    method getPath (line 41) | public Path getPath() {
    method setEvaluated (line 45) | public void setEvaluated(Boolean evaluated) {
    method hasEvaluated (line 49) | public boolean hasEvaluated() {
    method getType (line 53) | public ParamType getType() {
    method setType (line 57) | public void setType(ParamType type) {
    method setPath (line 61) | public void setPath(Path path) {
    method getJson (line 65) | public String getJson() {
    method setJson (line 69) | public void setJson(String json) {
    method getILateBingValue (line 73) | public ILateBindingValue getILateBingValue(){
    method toList (line 95) | public static <T> List<T> toList(final Class<T> type, final Evaluation...
    method consume (line 120) | public static void consume(Class expectedType, EvaluationContext ctx, ...

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/PassthruPathFunction.java
  class PassthruPathFunction (line 13) | public class PassthruPathFunction implements PathFunction {
    method invoke (line 15) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/PathFunction.java
  type PathFunction (line 16) | public interface PathFunction {
    method invoke (line 35) | Object invoke(String currentPath, PathRef parent, Object model, Evalua...

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/PathFunctionFactory.java
  class PathFunctionFactory (line 29) | public class PathFunctionFactory {
    method newFunction (line 76) | public static PathFunction newFunction(String name) throws InvalidPath...

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/json/Append.java
  class Append (line 17) | public class Append implements PathFunction {
    method invoke (line 18) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/json/KeySetFunction.java
  class KeySetFunction (line 14) | public class KeySetFunction implements PathFunction {
    method invoke (line 16) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/latebinding/ILateBindingValue.java
  type ILateBindingValue (line 21) | public interface ILateBindingValue {
    method get (line 30) | Object get();

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/latebinding/JsonLateBindingValue.java
  class JsonLateBindingValue (line 24) | public class JsonLateBindingValue implements ILateBindingValue {
    method JsonLateBindingValue (line 28) | public JsonLateBindingValue(JsonProvider jsonProvider, Parameter jsonP...
    method get (line 39) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/latebinding/PathLateBindingValue.java
  class PathLateBindingValue (line 29) | public class PathLateBindingValue implements ILateBindingValue {
    method PathLateBindingValue (line 34) | public PathLateBindingValue(final Path path, final Object rootDocument...
    method get (line 45) | public Object get() {
    method equals (line 49) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/numeric/AbstractAggregation.java
  class AbstractAggregation (line 18) | public abstract class AbstractAggregation implements PathFunction {
    method next (line 26) | protected abstract void next(Number value);
    method getValue (line 34) | protected abstract Number getValue();
    method invoke (line 36) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/numeric/Average.java
  class Average (line 8) | public class Average extends AbstractAggregation {
    method next (line 13) | @Override
    method getValue (line 19) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/numeric/Max.java
  class Max (line 8) | public class Max extends AbstractAggregation {
    method next (line 11) | @Override
    method getValue (line 18) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/numeric/Min.java
  class Min (line 8) | public class Min extends AbstractAggregation {
    method next (line 11) | @Override
    method getValue (line 18) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/numeric/StandardDeviation.java
  class StandardDeviation (line 8) | public class StandardDeviation extends AbstractAggregation {
    method next (line 13) | @Override
    method getValue (line 20) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/numeric/Sum.java
  class Sum (line 8) | public class Sum extends AbstractAggregation {
    method next (line 11) | @Override
    method getValue (line 16) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/sequence/AbstractSequenceAggregation.java
  class AbstractSequenceAggregation (line 17) | public abstract class AbstractSequenceAggregation implements PathFunction {
    method targetIndex (line 19) | protected abstract int targetIndex(EvaluationContext ctx, List<Paramet...
    method invoke (line 21) | @Override
    method getIndexFromParameters (line 43) | protected int getIndexFromParameters(EvaluationContext ctx, List<Param...

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/sequence/First.java
  class First (line 13) | public class First extends AbstractSequenceAggregation {
    method targetIndex (line 14) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/sequence/Index.java
  class Index (line 13) | public class Index extends AbstractSequenceAggregation {
    method targetIndex (line 14) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/sequence/Last.java
  class Last (line 13) | public class Last extends AbstractSequenceAggregation {
    method targetIndex (line 14) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/text/Concatenate.java
  class Concatenate (line 15) | public class Concatenate implements PathFunction {
    method invoke (line 16) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/function/text/Length.java
  class Length (line 20) | public class Length implements PathFunction {
    method invoke (line 42) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/ArrayIndexOperation.java
  class ArrayIndexOperation (line 13) | public class ArrayIndexOperation {
    method ArrayIndexOperation (line 19) | private ArrayIndexOperation(List<Integer> indexes) {
    method indexes (line 23) | public List<Integer> indexes() {
    method isSingleIndexOperation (line 27) | public boolean isSingleIndexOperation(){
    method toString (line 31) | @Override
    method parse (line 41) | public static ArrayIndexOperation parse(String operation) {
    method parseInteger (line 59) | private static Integer parseInteger(String token) {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/ArrayIndexToken.java
  class ArrayIndexToken (line 21) | public class ArrayIndexToken extends ArrayPathToken {
    method ArrayIndexToken (line 25) | ArrayIndexToken(final ArrayIndexOperation arrayIndexOperation) {
    method evaluate (line 29) | @Override
    method getPathFragment (line 42) | @Override
    method isTokenDefinite (line 47) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/ArrayPathToken.java
  class ArrayPathToken (line 23) | public abstract class ArrayPathToken extends PathToken {
    method checkArrayModel (line 34) | protected boolean checkArrayModel(String currentPath, Object model, Ev...

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/ArraySliceOperation.java
  class ArraySliceOperation (line 7) | public class ArraySliceOperation {
    type Operation (line 9) | public enum Operation {
    method ArraySliceOperation (line 19) | private ArraySliceOperation(Integer from, Integer to, Operation operat...
    method from (line 25) | public Integer from() {
    method to (line 29) | public Integer to() {
    method operation (line 33) | public Operation operation() {
    method toString (line 37) | @Override
    method parse (line 49) | public static ArraySliceOperation parse(String operation){
    method tryRead (line 76) | private static Integer tryRead(String[] tokens, int idx){

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/ArraySliceToken.java
  class ArraySliceToken (line 21) | public class ArraySliceToken extends ArrayPathToken {
    method ArraySliceToken (line 27) | ArraySliceToken(final ArraySliceOperation operation) {
    method evaluate (line 31) | @Override
    method sliceFrom (line 48) | private void sliceFrom(String currentPath, PathRef parent, Object mode...
    method sliceBetween (line 67) | private void sliceBetween(String currentPath, PathRef parent, Object m...
    method sliceTo (line 85) | private void sliceTo(String currentPath, PathRef parent, Object model,...
    method getPathFragment (line 104) | @Override
    method isTokenDefinite (line 109) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/CompiledPath.java
  class CompiledPath (line 29) | public class CompiledPath implements Path {
    method CompiledPath (line 38) | public CompiledPath(RootPathToken root, boolean isRootPath) {
    method isRootPath (line 43) | @Override
    method invertScannerFunctionRelationship (line 62) | private RootPathToken invertScannerFunctionRelationship(final RootPath...
    method evaluate (line 90) | @Override
    method evaluate (line 105) | @Override
    method isDefinite (line 110) | @Override
    method isFunctionPath (line 115) | @Override
    method toString (line 120) | @Override
    method getRoot (line 125) | public RootPathToken getRoot() {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/EvaluationContextImpl.java
  class EvaluationContextImpl (line 39) | public class EvaluationContextImpl implements EvaluationContext {
    method getRoot (line 55) | public RootPathToken getRoot(){
    method EvaluationContextImpl (line 59) | public EvaluationContextImpl(Path path, Object rootDocument, Configura...
    method documentEvalCache (line 73) | public HashMap<Path, Object> documentEvalCache() {
    method forUpdate (line 77) | public boolean forUpdate(){
    method addResult (line 81) | public void addResult(String path, PathRef operation, Object model) {
    method jsonProvider (line 102) | public JsonProvider jsonProvider() {
    method options (line 106) | public Set<Option> options() {
    method configuration (line 110) | @Override
    method rootDocument (line 115) | @Override
    method updateOperations (line 120) | public Collection<PathRef> updateOperations(){
    method getValue (line 128) | @SuppressWarnings("unchecked")
    method getValue (line 134) | @SuppressWarnings("unchecked")
    method getPath (line 154) | @SuppressWarnings("unchecked")
    method getPathList (line 166) | @Override
    class FoundResultImpl (line 178) | private static class FoundResultImpl implements EvaluationListener.Fou...
      method FoundResultImpl (line 184) | private FoundResultImpl(int index, String path, Object result) {
      method index (line 190) | @Override
      method path (line 195) | @Override
      method result (line 200) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/FunctionPathToken.java
  class FunctionPathToken (line 20) | public class FunctionPathToken extends PathToken {
    method FunctionPathToken (line 26) | public FunctionPathToken(String pathFragment, List<Parameter> paramete...
    method evaluate (line 37) | @Override
    method cleanWildcardPathToken (line 49) | private void cleanWildcardPathToken() {
    method evaluateParameters (line 66) | private void evaluateParameters(String currentPath, PathRef parent, Ob...
    method isTokenDefinite (line 95) | @Override
    method getPathFragment (line 100) | @Override
    method setParameters (line 106) | public void setParameters(List<Parameter> parameters) {
    method getParameters (line 110) | public List<Parameter> getParameters() {
    method getFunctionName (line 113) | public String getFunctionName() {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java
  class PathCompiler (line 20) | public class PathCompiler {
    method PathCompiler (line 48) | private PathCompiler(String path, LinkedList<Predicate> filterStack){
    method PathCompiler (line 52) | private PathCompiler(CharacterIndex path, LinkedList<Predicate> filter...
    method compile (line 57) | private Path compile() {
    method compile (line 62) | public static Path compile(String path, final Predicate... filters) {
    method readWhitespace (line 87) | private void readWhitespace() {
    method isPathContext (line 97) | private Boolean isPathContext(char c) {
    method readContextToken (line 102) | private RootPathToken readContextToken() {
    method readNextToken (line 131) | private boolean readNextToken(PathTokenAppender appender) {
    method readDotToken (line 163) | private boolean readDotToken(PathTokenAppender appender) {
    method readPropertyOrFunctionToken (line 181) | private boolean readPropertyOrFunctionToken(PathTokenAppender appender) {
    method parseFunctionParameters (line 288) | private List<Parameter> parseFunctionParameters(String funcName) {
    method isWhitespace (line 397) | private boolean isWhitespace(char c) {
    method readPlaceholderToken (line 404) | private boolean readPlaceholderToken(PathTokenAppender appender) {
    method readFilterToken (line 452) | private boolean readFilterToken(PathTokenAppender appender) {
    method readWildCardToken (line 491) | private boolean readWildCardToken(PathTokenAppender appender) {
    method readArrayToken (line 521) | private boolean readArrayToken(PathTokenAppender appender) {
    method readBracketPropertyToken (line 570) | private boolean readBracketPropertyToken(PathTokenAppender appender) {
    method fail (line 641) | public static boolean fail(String message) {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/PathToken.java
  class PathToken (line 26) | public abstract class PathToken {
    method setUpstreamArrayIndex (line 35) | public void setUpstreamArrayIndex(int idx){
    method appendTailToken (line 39) | PathToken appendTailToken(PathToken next) {
    method handleObjectProperty (line 45) | void handleObjectProperty(String currentPath, Object model, Evaluation...
    method hasProperty (line 125) | private static boolean hasProperty(String property, Object model, Eval...
    method readObjectProperty (line 129) | private static Object readObjectProperty(String property, Object model...
    method handleArrayIndex (line 134) | protected void handleArrayIndex(int index, String currentPath, Object ...
    method prev (line 149) | PathToken prev(){
    method next (line 153) | PathToken next() {
    method isLeaf (line 160) | boolean isLeaf() {
    method isRoot (line 164) | boolean isRoot() {
    method isUpstreamDefinite (line 168) | boolean isUpstreamDefinite() {
    method getTokenCount (line 175) | public int getTokenCount() {
    method isPathDefinite (line 186) | public boolean isPathDefinite() {
    method toString (line 198) | @Override
    method hashCode (line 207) | @Override
    method equals (line 212) | @Override
    method invoke (line 217) | public void invoke(PathFunction pathFunction, String currentPath, Path...
    method evaluate (line 221) | public abstract void evaluate(String currentPath, PathRef parent,  Obj...
    method isTokenDefinite (line 223) | public abstract boolean isTokenDefinite();
    method getPathFragment (line 225) | protected abstract String getPathFragment();
    method setNext (line 227) | public void setNext(final PathToken next) {
    method getNext (line 231) | public PathToken getNext() {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/PathTokenAppender.java
  type PathTokenAppender (line 3) | public interface PathTokenAppender {
    method appendPathToken (line 4) | PathTokenAppender appendPathToken(PathToken next);

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/PathTokenFactory.java
  class PathTokenFactory (line 11) | public class PathTokenFactory {
    method createRootPathToken (line 13) | public static RootPathToken createRootPathToken(char token) {
    method createSinglePropertyPathToken (line 17) | public static PathToken createSinglePropertyPathToken(String property,...
    method createPropertyPathToken (line 21) | public static PathToken createPropertyPathToken(List<String> propertie...
    method createSliceArrayPathToken (line 25) | public static PathToken createSliceArrayPathToken(final ArraySliceOper...
    method createIndexArrayPathToken (line 29) | public static PathToken createIndexArrayPathToken(final ArrayIndexOper...
    method createWildCardPathToken (line 33) | public static PathToken createWildCardPathToken() {
    method crateScanToken (line 37) | public static PathToken crateScanToken() {
    method createPredicatePathToken (line 41) | public static PathToken createPredicatePathToken(Collection<Predicate>...
    method createPredicatePathToken (line 45) | public static PathToken createPredicatePathToken(Predicate predicate) {
    method createFunctionPathToken (line 49) | public static PathToken createFunctionPathToken(String function, List<...

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/PredicateContextImpl.java
  class PredicateContextImpl (line 26) | public class PredicateContextImpl implements Predicate.PredicateContext {
    method PredicateContextImpl (line 35) | public PredicateContextImpl(Object contextDocument, Object rootDocumen...
    method evaluate (line 42) | public Object evaluate(Path path){
    method documentPathCache (line 58) | public HashMap<Path, Object> documentPathCache() {
    method item (line 62) | @Override
    method item (line 67) | @Override
    method root (line 72) | @Override
    method configuration (line 77) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/PredicatePathToken.java
  class PredicatePathToken (line 31) | public class PredicatePathToken extends PathToken {
    method PredicatePathToken (line 36) | PredicatePathToken(Predicate filter) {
    method PredicatePathToken (line 40) | PredicatePathToken(Collection<Predicate> predicates) {
    method evaluate (line 44) | @Override
    method accept (line 72) | public boolean accept(final Object obj, final Object root, final Confi...
    method getPathFragment (line 87) | @Override
    method isTokenDefinite (line 101) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/PropertyPathToken.java
  class PropertyPathToken (line 31) | public class PropertyPathToken extends PathToken {
    method PropertyPathToken (line 36) | public PropertyPathToken(List<String> properties, char stringDelimiter) {
    method getProperties (line 44) | public List<String> getProperties() {
    method singlePropertyCase (line 48) | public boolean singlePropertyCase() {
    method multiPropertyMergeCase (line 52) | public boolean multiPropertyMergeCase() {
    method multiPropertyIterationCase (line 56) | public boolean multiPropertyIterationCase() {
    method evaluate (line 61) | @Override
    method isTokenDefinite (line 93) | @Override
    method getPathFragment (line 99) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/RootPathToken.java
  class RootPathToken (line 22) | public class RootPathToken extends PathToken {
    method RootPathToken (line 29) | RootPathToken(char rootToken) {
    method getTail (line 35) | public PathToken getTail(){
    method getTokenCount (line 39) | @Override
    method append (line 44) | public RootPathToken append(PathToken next) {
    method getPathTokenAppender (line 50) | public PathTokenAppender getPathTokenAppender(){
    method evaluate (line 60) | @Override
    method getPathFragment (line 70) | @Override
    method isTokenDefinite (line 75) | @Override
    method isFunctionPath (line 80) | public boolean isFunctionPath() {
    method setTail (line 84) | public void setTail(PathToken token) {

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/ScanPathToken.java
  class ScanPathToken (line 26) | public class ScanPathToken extends PathToken {
    method ScanPathToken (line 28) | ScanPathToken() {
    method evaluate (line 31) | @Override
    method walk (line 39) | public static void walk(PathToken pt, String currentPath, PathRef pare...
    method walkArray (line 47) | public static void walkArray(PathToken pt, String currentPath, PathRef...
    method walkObject (line 74) | public static void walkObject(PathToken pt, String currentPath, PathRe...
    method createScanPredicate (line 90) | private static Predicate createScanPredicate(final PathToken target, f...
    method isTokenDefinite (line 105) | @Override
    method getPathFragment (line 110) | @Override
    type Predicate (line 115) | private interface Predicate {
      method matches (line 116) | boolean matches(Object model);
    method matches (line 121) | @Override
    class FilterPathTokenPredicate (line 127) | private static final class FilterPathTokenPredicate implements Predica...
      method FilterPathTokenPredicate (line 131) | private FilterPathTokenPredicate(PathToken target, EvaluationContext...
      method matches (line 136) | @Override
    class WildcardPathTokenPredicate (line 142) | private static final class WildcardPathTokenPredicate implements Predi...
      method matches (line 144) | @Override
    class ArrayPathTokenPredicate (line 150) | private static final class ArrayPathTokenPredicate implements Predicate {
      method ArrayPathTokenPredicate (line 153) | private ArrayPathTokenPredicate(EvaluationContextImpl ctx) {
      method matches (line 157) | @Override
    class PropertyPathTokenPredicate (line 163) | private static final class PropertyPathTokenPredicate implements Predi...
      method PropertyPathTokenPredicate (line 167) | private PropertyPathTokenPredicate(PathToken target, EvaluationConte...
      method matches (line 172) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/internal/path/WildcardPathToken.java
  class WildcardPathToken (line 28) | public class WildcardPathToken extends PathToken {
    method WildcardPathToken (line 30) | public WildcardPathToken() {
    method evaluate (line 33) | @Override
    method isTokenDefinite (line 53) | @Override
    method getPathFragment (line 58) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/cache/Cache.java
  type Cache (line 6) | public interface Cache {
    method get (line 13) | JsonPath get(String key);
    method put (line 21) | void put(String key, JsonPath value);

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/cache/CacheProvider.java
  class CacheProvider (line 9) | public class CacheProvider {
    class CacheHolder (line 17) | private static class CacheHolder {
    method setCache (line 37) | public static void setCache(Cache cache){
    method getCache (line 44) | public static Cache getCache() {
    method getDefaultCache (line 49) | private static Cache getDefaultCache(){

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/cache/LRUCache.java
  class LRUCache (line 25) | public class LRUCache implements Cache {
    method LRUCache (line 33) | public LRUCache(int limit) {
    method put (line 37) | public void put(String key, JsonPath value) {
    method get (line 49) | public JsonPath get(String key) {
    method addKey (line 57) | private void addKey(String key) {
    method removeLast (line 66) | private String removeLast() {
    method removeThenAddKey (line 76) | private void removeThenAddKey(String key) {
    method removeFirstOccurrence (line 87) | private void removeFirstOccurrence(String key) {
    method getSilent (line 96) | public JsonPath getSilent(String key) {
    method remove (line 100) | public void remove(String key) {
    method size (line 105) | public int size() {
    method toString (line 109) | public String toString() {

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/cache/NOOPCache.java
  class NOOPCache (line 5) | public class NOOPCache implements Cache {
    method get (line 7) | @Override
    method put (line 12) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/json/AbstractJsonProvider.java
  class AbstractJsonProvider (line 23) | public abstract class AbstractJsonProvider implements JsonProvider {
    method isArray (line 31) | public boolean isArray(Object obj) {
    method getArrayIndex (line 42) | public Object getArrayIndex(Object obj, int idx) {
    method getArrayIndex (line 46) | @Deprecated
    method setArrayIndex (line 51) | public void setArrayIndex(Object array, int index, Object newValue) {
    method getMapValue (line 72) | public Object getMapValue(Object obj, String key){
    method setProperty (line 88) | @SuppressWarnings("unchecked")
    method removeProperty (line 105) | @SuppressWarnings("unchecked")
    method isMap (line 123) | public boolean isMap(Object obj) {
    method getPropertyKeys (line 133) | @SuppressWarnings("unchecked")
    method length (line 148) | public int length(Object obj) {
    method toIterable (line 166) | @SuppressWarnings("unchecked")
    method unwrap (line 174) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/json/GsonJsonProvider.java
  class GsonJsonProvider (line 36) | public class GsonJsonProvider extends AbstractJsonProvider {
    method GsonJsonProvider (line 44) | public GsonJsonProvider() {
    method GsonJsonProvider (line 53) | public GsonJsonProvider(final Gson gson) {
    method unwrap (line 57) | public Object unwrap(final Object o) {
    method isPrimitiveNumber (line 86) | private static boolean isPrimitiveNumber(final Number n) {
    method unwrapNumber (line 95) | private static Number unwrapNumber(final Number n) {
    method parse (line 122) | @Override
    method parse (line 127) | @Override
    method toJson (line 137) | @Override
    method createArray (line 142) | @Override
    method createMap (line 147) | @Override
    method isArray (line 152) | @Override
    method getArrayIndex (line 157) | @Override
    method setArrayIndex (line 162) | @Override
    method getMapValue (line 176) | @Override
    method setProperty (line 187) | @Override
    method removeProperty (line 208) | @SuppressWarnings("unchecked")
    method isMap (line 219) | @Override
    method getPropertyKeys (line 226) | @Override
    method length (line 236) | @Override
    method toIterable (line 254) | @Override
    method createJsonElement (line 265) | private JsonElement createJsonElement(final Object o) {
    method toJsonArray (line 269) | private JsonArray toJsonArray(final Object o) {
    method toJsonObject (line 273) | private JsonObject toJsonObject(final Object o) {
    method toJsonElement (line 277) | private JsonElement toJsonElement(final Object o) {

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/json/Jackson3JsonNodeJsonProvider.java
  class Jackson3JsonNodeJsonProvider (line 23) | public class Jackson3JsonNodeJsonProvider extends AbstractJsonProvider {
    method getObjectMapper (line 29) | public ObjectMapper getObjectMapper() {
    method Jackson3JsonNodeJsonProvider (line 36) | public Jackson3JsonNodeJsonProvider() {
    method Jackson3JsonNodeJsonProvider (line 45) | public Jackson3JsonNodeJsonProvider(ObjectMapper objectMapper) {
    method parse (line 49) | @Override
    method parse (line 58) | @Override
    method parse (line 67) | @Override
    method toJson (line 76) | @Override
    method createArray (line 84) | @Override
    method createMap (line 89) | @Override
    method unwrap (line 94) | public Object unwrap(Object o) {
    method isArray (line 129) | @Override
    method getArrayIndex (line 134) | @Override
    method setArrayIndex (line 139) | @Override
    method getMapValue (line 153) | @Override
    method setProperty (line 164) | @Override
    method removeProperty (line 185) | public void removeProperty(Object obj, Object key) {
    method isMap (line 195) | @Override
    method getPropertyKeys (line 200) | @Override
    method length (line 205) | @Override
    method toIterable (line 220) | @Override
    method createJsonElement (line 242) | private JsonNode createJsonElement(Object o) {
    method toJsonArray (line 255) | private ArrayNode toJsonArray(Object o) {
    method toJsonObject (line 259) | private ObjectNode toJsonObject(Object o) {
    method setValueInObjectNode (line 263) | private void setValueInObjectNode(ObjectNode objectNode, Object key, O...

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/json/Jackson3JsonProvider.java
  class Jackson3JsonProvider (line 31) | public class Jackson3JsonProvider extends AbstractJsonProvider {
    method getObjectMapper (line 39) | public ObjectMapper getObjectMapper() {
    method Jackson3JsonProvider (line 46) | public Jackson3JsonProvider() {
    method Jackson3JsonProvider (line 55) | public Jackson3JsonProvider(ObjectMapper objectMapper) {
    method Jackson3JsonProvider (line 65) | public Jackson3JsonProvider(ObjectMapper objectMapper, ObjectReader ob...
    method parse (line 70) | @Override
    method parse (line 79) | @Override
    method parse (line 88) | @Override
    method toJson (line 97) | @Override
    method createArray (line 110) | @Override
    method createMap (line 115) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java
  class JacksonJsonNodeJsonProvider (line 23) | public class JacksonJsonNodeJsonProvider extends AbstractJsonProvider {
    method getObjectMapper (line 29) | public ObjectMapper getObjectMapper() {
    method JacksonJsonNodeJsonProvider (line 36) | public JacksonJsonNodeJsonProvider() {
    method JacksonJsonNodeJsonProvider (line 45) | public JacksonJsonNodeJsonProvider(ObjectMapper objectMapper) {
    method parse (line 49) | @Override
    method parse (line 58) | @Override
    method parse (line 68) | @Override
    method toJson (line 77) | @Override
    method createArray (line 85) | @Override
    method createMap (line 90) | @Override
    method unwrap (line 95) | public Object unwrap(Object o) {
    method isArray (line 131) | @Override
    method getArrayIndex (line 136) | @Override
    method setArrayIndex (line 141) | @Override
    method getMapValue (line 155) | @Override
    method setProperty (line 166) | @Override
    method removeProperty (line 187) | public void removeProperty(Object obj, Object key) {
    method isMap (line 197) | @Override
    method getPropertyKeys (line 202) | @Override
    method length (line 213) | @Override
    method toIterable (line 229) | @Override
    method createJsonElement (line 251) | private JsonNode createJsonElement(Object o) {
    method toJsonArray (line 264) | private ArrayNode toJsonArray(Object o) {
    method toJsonObject (line 268) | private ObjectNode toJsonObject(Object o) {
    method setValueInObjectNode (line 272) | private void setValueInObjectNode(ObjectNode objectNode, Object key, O...

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonProvider.java
  class JacksonJsonProvider (line 31) | public class JacksonJsonProvider extends AbstractJsonProvider {
    method getObjectMapper (line 39) | public ObjectMapper getObjectMapper() {
    method JacksonJsonProvider (line 46) | public JacksonJsonProvider() {
    method JacksonJsonProvider (line 54) | public JacksonJsonProvider(ObjectMapper objectMapper) {
    method JacksonJsonProvider (line 63) | public JacksonJsonProvider(ObjectMapper objectMapper, ObjectReader obj...
    method parse (line 68) | @Override
    method parse (line 77) | @Override
    method parse (line 87) | @Override
    method toJson (line 96) | @Override
    method createArray (line 111) | @Override
    method createMap (line 116) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/json/JakartaJsonProvider.java
  class JakartaJsonProvider (line 39) | public class JakartaJsonProvider extends AbstractJsonProvider {
    method JakartaJsonProvider (line 52) | public JakartaJsonProvider() {
    method JakartaJsonProvider (line 66) | public JakartaJsonProvider(boolean mutableJson) {
    method parse (line 70) | @Override
    method parse (line 75) | @Override
    method parse (line 81) | @Override
    method parse (line 90) | private Object parse(Reader jsonInput) {
    method toJson (line 100) | @Override
    method createArray (line 112) | @Override
    method createMap (line 121) | @Override
    method isArray (line 130) | @Override
    method getArrayIndex (line 135) | @Override
    method setArrayIndex (line 149) | @Override
    method getMapValue (line 169) | @Override
    method setProperty (line 186) | @Override
    method removeProperty (line 221) | @SuppressWarnings("rawtypes")
    method isMap (line 244) | @Override
    method getPropertyKeys (line 249) | @Override
    method length (line 262) | @Override
    method toIterable (line 284) | @Override
    method unwrap (line 309) | @Override
    method toArrayIndex (line 349) | private Integer toArrayIndex(Object index) {
    method wrap (line 366) | private JsonValue wrap(Object obj) {
    method proxyAll (line 428) | private JsonStructure proxyAll(JsonStructure jsonStruct) {
    class JsonArrayProxy (line 459) | private static class JsonArrayProxy implements JsonArray {
      method JsonArrayProxy (line 463) | JsonArrayProxy(JsonArray arr) {
      method getJsonObject (line 467) | @Override
      method getJsonArray (line 472) | @Override
      method getJsonNumber (line 477) | @Override
      method getJsonString (line 482) | @Override
      method getValuesAs (line 487) | @Override
      method getString (line 492) | @Override
      method getString (line 497) | @Override
      method getInt (line 502) | @Override
      method getInt (line 507) | @Override
      method getBoolean (line 512) | @Override
      method getBoolean (line 517) | @Override
      method isNull (line 522) | @Override
      method getValueType (line 527) | @Override
      method size (line 532) | @Override
      method isEmpty (line 537) | @Override
      method contains (line 542) | @Override
      method iterator (line 547) | @Override
      method toArray (line 574) | @Override
      method toArray (line 579) | @Override
      method add (line 584) | @Override
      method remove (line 590) | @Override
      method containsAll (line 601) | @Override
      method addAll (line 606) | @Override
      method addAll (line 620) | @Override
      method removeAll (line 641) | @Override
      method retainAll (line 663) | @Override
      method clear (line 686) | @Override
      method get (line 691) | @Override
      method set (line 696) | @Override
      method add (line 708) | @Override
      method remove (line 713) | @Override
      method indexOf (line 720) | @Override
      method lastIndexOf (line 725) | @Override
      method listIterator (line 730) | @Override
      method listIterator (line 735) | @Override
      method subList (line 813) | @Override
      method hashCode (line 818) | @Override
      method equals (line 823) | @Override
      method toString (line 833) | @Override
    class JsonObjectProxy (line 839) | private static class JsonObjectProxy implements JsonObject {
      method JsonObjectProxy (line 843) | JsonObjectProxy(JsonObject obj) {
      method getJsonArray (line 847) | @Override
      method getJsonObject (line 852) | @Override
      method getJsonNumber (line 857) | @Override
      method getJsonString (line 862) | @Override
      method getString (line 867) | @Override
      method getString (line 872) | @Override
      method getInt (line 877) | @Override
      method getInt (line 882) | @Override
      method getBoolean (line 887) | @Override
      method getBoolean (line 892) | @Override
      method isNull (line 897) | @Override
      method getValueType (line 902) | @Override
      method size (line 907) | @Override
      method isEmpty (line 912) | @Override
      method containsKey (line 917) | @Override
      method containsValue (line 922) | @Override
      method get (line 927) | @Override
      method put (line 932) | @Override
      method remove (line 939) | @Override
      method putAll (line 950) | @Override
      method clear (line 962) | @Override
      method keySet (line 967) | @Override
      method values (line 972) | @Override
      method entrySet (line 977) | @Override
      method hashCode (line 1023) | @Override
      method equals (line 1028) | @Override
      method toString (line 1038) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/json/JettisonProvider.java
  class JettisonProvider (line 30) | public class JettisonProvider extends AbstractJsonProvider
    method jettisonUnwrap (line 32) | private static Object jettisonUnwrap(Object obj)
    method jettisonWrap (line 41) | private static Object jettisonWrap(Object obj)
    class JettisonTokener (line 51) | private static class JettisonTokener extends org.codehaus.jettison.jso...
      method JettisonTokener (line 53) | public JettisonTokener(String s)
      method newJSONObject (line 57) | @Override
      method newJSONArray (line 62) | @Override
    class JettisonObject (line 70) | private static class JettisonObject extends org.codehaus.jettison.json...
      method JettisonObject (line 74) | private JettisonObject(JettisonTokener tokener) throws JSONException
      method JettisonObject (line 79) | private JettisonObject()
      method iterator (line 84) | @Override
    class JettisonArray (line 91) | private static class JettisonArray extends org.codehaus.jettison.json....
      method JettisonArray (line 95) | private JettisonArray(JettisonTokener tokener) throws JSONException
      method JettisonArray (line 100) | private JettisonArray()
      method iterator (line 105) | @Override
    class JettisonArrayIterator (line 112) | private static class JettisonArrayIterator implements Iterator<Object>
      method JettisonArrayIterator (line 117) | private JettisonArrayIterator(org.codehaus.jettison.json.JSONArray j...
      method hasNext (line 122) | @Override
      method next (line 128) | @Override
      method remove (line 141) | @Override
    class JettisonObjectIterator (line 149) | private static class JettisonObjectIterator implements Iterator<Object>
      method JettisonObjectIterator (line 155) | private JettisonObjectIterator(org.codehaus.jettison.json.JSONObject...
      method hasNext (line 161) | @Override
      method next (line 167) | @Override
      method remove (line 180) | @Override
    method parse (line 188) | private Object parse(JettisonTokener JsonTokener)
    method parse (line 210) | @Override
    method parse (line 216) | @Override
    method toJson (line 236) | @Override
    method createMap (line 258) | @Override
    method createArray (line 264) | @Override
    method unwrap (line 270) | @Override
    method isArray (line 276) | @Override
    method isMap (line 282) | @Override
    method length (line 288) | @Override
    method toIterable (line 306) | @Override
    method getPropertyKeys (line 328) | public Collection<String> getPropertyKeys(Object obj)
    method getArrayIndex (line 351) | @Override
    method setArrayIndex (line 357) | @Override public void setArrayIndex(Object array, int index, Object va...
    method getMapValue (line 374) | @Override
    method setProperty (line 385) | @Override
    method removeProperty (line 406) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonOrgJsonProvider.java
  class JsonOrgJsonProvider (line 19) | public class JsonOrgJsonProvider extends AbstractJsonProvider {
    method parse (line 21) | @Override
    method parse (line 30) | @Override
    method unwrap (line 42) | @Override
    method toJson (line 50) | @Override
    method createArray (line 55) | @Override
    method createMap (line 60) | @Override
    method isArray (line 65) | @Override
    method getArrayIndex (line 70) | @Override
    method setArrayIndex (line 79) | @Override
    method getMapValue (line 92) | @Override
    method setProperty (line 107) | @Override
    method removeProperty (line 131) | @SuppressWarnings("unchecked")
    method isMap (line 142) | @Override
    method getPropertyKeys (line 147) | @SuppressWarnings("unchecked")
    method length (line 160) | @Override
    method toIterable (line 175) | @Override
    method createJsonElement (line 203) | private Object createJsonElement(Object o) {
    method toJsonArray (line 207) | private JSONArray toJsonArray(Object o) {
    method toJsonObject (line 211) | private JSONObject toJsonObject(Object o) {

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonProvider.java
  type JsonProvider (line 23) | public interface JsonProvider {
    method parse (line 33) | Object parse(String json) throws InvalidJsonException;
    method parse (line 41) | default Object parse(byte[] json) throws InvalidJsonException {
    method parse (line 51) | Object parse(InputStream jsonStream, String charset) throws InvalidJso...
    method toJson (line 58) | String toJson(Object obj);
    method createArray (line 64) | Object createArray();
    method createMap (line 70) | Object createMap();
    method isArray (line 78) | boolean isArray(Object obj);
    method length (line 86) | int length(Object obj);
    method toIterable (line 94) | Iterable<?> toIterable(Object obj);
    method getPropertyKeys (line 103) | Collection<String> getPropertyKeys(Object obj);
    method getArrayIndex (line 112) | Object getArrayIndex(Object obj, int idx);
    method getArrayIndex (line 122) | @Deprecated
    method setArrayIndex (line 132) | void setArrayIndex(Object array, int idx, Object newValue);
    method getMapValue (line 141) | Object getMapValue(Object obj, String key);
    method setProperty (line 150) | void setProperty(Object obj, Object key, Object value);
    method removeProperty (line 158) | void removeProperty(Object obj, Object key);
    method isMap (line 166) | boolean isMap(Object obj);
    method unwrap (line 175) | Object unwrap(Object obj);

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonSmartJsonProvider.java
  class JsonSmartJsonProvider (line 33) | public class JsonSmartJsonProvider extends AbstractJsonProvider {
    method JsonSmartJsonProvider (line 38) | public JsonSmartJsonProvider() {
    method JsonSmartJsonProvider (line 42) | public JsonSmartJsonProvider(int parseMode){
    method JsonSmartJsonProvider (line 47) | public JsonSmartJsonProvider(int parseMode, JsonReaderI<?> mapper){
    method createArray (line 52) | public Object createArray() {
    method createMap (line 56) | public Object createMap() {
    method parse (line 60) | public Object parse(String json) {
    method parse (line 68) | @Override
    method toJson (line 79) | @Override
    method createParser (line 93) | private JSONParser createParser() {

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/json/TapestryJsonProvider.java
  class TapestryJsonProvider (line 12) | public class TapestryJsonProvider extends AbstractJsonProvider {
    method parse (line 16) | @Override
    method parse (line 21) | @Override
    method toJson (line 34) | @Override
    method createArray (line 39) | @Override
    method createMap (line 44) | @Override
    method setProperty (line 49) | @Override
    method isMap (line 57) | @Override
    method getArrayIndex (line 62) | @Override
    method getPropertyKeys (line 67) | @Override
    method getMapValue (line 72) | @Override
    method length (line 81) | @Override
    method isArray (line 92) | @Override
    method setArrayIndex (line 97) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/mapper/GsonMappingProvider.java
  class GsonMappingProvider (line 28) | public class GsonMappingProvider implements MappingProvider {
    method GsonMappingProvider (line 34) | public GsonMappingProvider(final Gson gson) {
    method GsonMappingProvider (line 43) | public GsonMappingProvider(Callable<Gson> factory) {
    method GsonMappingProvider (line 47) | public GsonMappingProvider() {
    method map (line 63) | @Override
    method map (line 75) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/mapper/Jackson3MappingProvider.java
  class Jackson3MappingProvider (line 22) | public class Jackson3MappingProvider implements MappingProvider {
    method Jackson3MappingProvider (line 26) | public Jackson3MappingProvider() {
    method Jackson3MappingProvider (line 30) | public Jackson3MappingProvider(ObjectMapper objectMapper) {
    method map (line 34) | @Override
    method map (line 47) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JacksonMappingProvider.java
  class JacksonMappingProvider (line 22) | public class JacksonMappingProvider implements MappingProvider {
    method JacksonMappingProvider (line 26) | public JacksonMappingProvider() {
    method JacksonMappingProvider (line 30) | public JacksonMappingProvider(ObjectMapper objectMapper) {
    method map (line 35) | @Override
    method map (line 48) | @Override

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JakartaMappingProvider.java
  class JakartaMappingProvider (line 55) | public class JakartaMappingProvider implements MappingProvider {
    method JakartaMappingProvider (line 60) | public JakartaMappingProvider() {
    method JakartaMappingProvider (line 66) | public JakartaMappingProvider(JsonbConfig jsonbConfiguration) {
    method map (line 76) | @Override
    method map (line 91) | @Override
    method mapImpl (line 98) | private Object mapImpl(Object source, final Type targetType) {
    method mapIntegralJsonNumber (line 203) | @SuppressWarnings("unchecked")
    method mapDecimalJsonNumber (line 225) | @SuppressWarnings("unchecked")
    method unwrapJsonValue (line 245) | private Object unwrapJsonValue(Object jsonValue) {
    method newCollectionOfType (line 295) | private Collection<Object> newCollectionOfType(Class<?> collectionType...
    method newNoArgInstance (line 324) | private Object newNoArgInstance(Class<?> targetType) throws MappingExc...
    method findMethod (line 355) | private Method findMethod(Class<?> clazz, String name, Class<?>... par...
    method getRawClass (line 370) | private Class<?> getRawClass(Type targetType) {
    method getFirstTypeArgument (line 384) | private Type getFirstTypeArgument(Type targetType) {
    class JsonStructureToParserAdapter (line 406) | private static class JsonStructureToParserAdapter implements JsonParser {
      method JsonStructureToParserAdapter (line 412) | JsonStructureToParserAdapter(JsonStructure jsonStruct) {
      method hasNext (line 416) | @Override
      method next (line 421) | @Override
      method getString (line 463) | @Override
      method isIntegralNumber (line 477) | @Override
      method getInt (line 485) | @Override
      method getLong (line 493) | @Override
      method getBigDecimal (line 501) | @Override
      method getLocation (line 509) | @Override
      method skipArray (line 514) | @Override
      method skipObject (line 524) | @Override
      method close (line 534) | @Override
      method createScope (line 539) | private JsonStructureScope createScope(JsonValue value) {
      method getState (line 548) | private Event getState(JsonValue value) {
    class JsonStructureScope (line 570) | private static abstract class JsonStructureScope implements Iterator<J...
      method getValue (line 577) | abstract JsonValue getValue();
    class JsonArrayScope (line 580) | private static class JsonArrayScope extends JsonStructureScope {
      method JsonArrayScope (line 584) | JsonArrayScope(JsonArray array) {
      method hasNext (line 588) | @Override
      method next (line 593) | @Override
      method getValue (line 599) | @Override
    class JsonObjectScope (line 605) | private static class JsonObjectScope extends JsonStructureScope {
      method JsonObjectScope (line 610) | JsonObjectScope(JsonObject object) {
      method hasNext (line 614) | @Override
      method next (line 619) | @Override
      method getValue (line 627) | @Override
      method getKey (line 632) | String getKey() {

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonOrgMappingProvider.java
  class JsonOrgMappingProvider (line 13) | public class JsonOrgMappingProvider implements MappingProvider {
    method map (line 14) | @Override
    method map (line 25) | @Override
    method mapToObject (line 31) | private Object mapToObject(Object source){

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java
  class JsonSmartMappingProvider (line 30) | public class JsonSmartMappingProvider implements MappingProvider {
    method JsonSmartMappingProvider (line 53) | public JsonSmartMappingProvider(final JsonReader jsonReader) {
    method JsonSmartMappingProvider (line 62) | public JsonSmartMappingProvider(Callable<JsonReader> factory) {
    method JsonSmartMappingProvider (line 66) | public JsonSmartMappingProvider() {
    method map (line 72) | @Override
    method map (line 92) | @Override
    class StringReader (line 97) | private static class StringReader extends JsonReaderI<String> {
      method StringReader (line 98) | public StringReader() {
      method convert (line 101) | public String convert(Object src) {
    class IntegerReader (line 108) | private static class IntegerReader extends JsonReaderI<Integer> {
      method IntegerReader (line 109) | public IntegerReader() {
      method convert (line 112) | public Integer convert(Object src) {
    class LongReader (line 132) | private static class LongReader extends JsonReaderI<Long> {
      method LongReader (line 133) | public LongReader() {
      method convert (line 136) | public Long convert(Object src) {
    class DoubleReader (line 157) | private static class DoubleReader extends JsonReaderI<Double> {
      method DoubleReader (line 158) | public DoubleReader() {
      method convert (line 161) | public Double convert(Object src) {
    class FloatReader (line 181) | private static class FloatReader extends JsonReaderI<Float> {
      method FloatReader (line 182) | public FloatReader() {
      method convert (line 185) | public Float convert(Object src) {
    class BigDecimalReader (line 205) | private static class BigDecimalReader extends JsonReaderI<BigDecimal> {
      method BigDecimalReader (line 206) | public BigDecimalReader() {
      method convert (line 209) | public BigDecimal convert(Object src) {
    class BigIntegerReader (line 216) | private static class BigIntegerReader extends JsonReaderI<BigInteger> {
      method BigIntegerReader (line 217) | public BigIntegerReader() {
      method convert (line 220) | public BigInteger convert(Object src) {
    class DateReader (line 227) | private static class DateReader extends JsonReaderI<Date> {
      method DateReader (line 228) | public DateReader() {
      method convert (line 231) | public Date convert(Object src) {
    class BooleanReader (line 249) | private static class BooleanReader extends JsonReaderI<Boolean> {
      method BooleanReader (line 250) | public BooleanReader() {
      method convert (line 253) | public Boolean convert(Object src) {

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/mapper/MappingException.java
  class MappingException (line 19) | public class MappingException extends JsonPathException {
    method MappingException (line 21) | public MappingException(Throwable cause) {
    method MappingException (line 25) | public MappingException(String message) {

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/mapper/MappingProvider.java
  type MappingProvider (line 23) | public interface MappingProvider {
    method map (line 34) | <T> T map(Object source, Class<T> targetType, Configuration configurat...
    method map (line 44) | <T> T map(Object source, TypeRef<T> targetType, Configuration configur...

FILE: json-path/src/main/java/com/jayway/jsonpath/spi/mapper/TapestryMappingProvider.java
  class TapestryMappingProvider (line 22) | public class TapestryMappingProvider implements MappingProvider {
    method map (line 24) | @Override
    method map (line 49) | @Override

FILE: json-path/src/test/java/com/jayway/jsonpath/BaseTest.java
  class BaseTest (line 25) | public class BaseTest {
    method createPredicateContext (line 171) | public Predicate.PredicateContext createPredicateContext(final Object ...

FILE: json-path/src/test/java/com/jayway/jsonpath/Configurations.java
  class Configurations (line 20) | public class Configurations {
    method configurations (line 70) | public static Iterable<Configuration> configurations() {
    method objectMappingConfigurations (line 83) | public static Iterable<Configuration> objectMappingConfigurations() {

FILE: json-path/src/test/java/com/jayway/jsonpath/DeepScanTest.java
  class DeepScanTest (line 19) | public class DeepScanTest extends BaseTest {
    method when_deep_scanning_non_array_subscription_is_ignored (line 21) | @Test
    method when_deep_scanning_null_subscription_is_ignored (line 32) | @Test
    method when_deep_scanning_array_index_oob_is_ignored (line 40) | @Test
    method definite_upstream_illegal_array_access_throws (line 49) | @Test
    method when_deep_scanning_illegal_property_access_is_ignored (line 60) | @Test
    method when_deep_scanning_illegal_predicate_is_ignored (line 73) | @Test
    method when_deep_scanning_require_properties_is_ignored_on_scan_target (line 84) | @Test
    method when_deep_scanning_require_properties_is_ignored_on_scan_target_but_not_on_children (line 99) | @Test
    method when_deep_scanning_leaf_multi_props_work (line 106) | @Test
    method require_single_property_ok (line 130) | @Test
    method require_single_property (line 145) | @Test
    method require_multi_property_all_match (line 160) | @Test
    method require_multi_property_some_match (line 180) | @Test
    method scan_for_single_property (line 205) | @Test
    method scan_for_property_path (line 229) | @Test
    method scan_for_property_path_missing_required_property (line 252) | @Test
    method scans_can_be_filtered (line 276) | @Test
    method scan_with_a_function_filter (line 301) | @Test
    method deepScanPathDefault (line 307) | @Test
    method deepScanPathRequireProperties (line 312) | @Test
    method executeScanPath (line 317) | private void executeScanPath(Option... options) {

FILE: json-path/src/test/java/com/jayway/jsonpath/EscapeTest.java
  class EscapeTest (line 11) | public class EscapeTest extends BaseTest {
    method before (line 15) | @BeforeAll
    method after (line 21) | @AfterAll
    method urls_are_not_escaped (line 26) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/EvaluationListenerTest.java
  class EvaluationListenerTest (line 10) | public class EvaluationListenerTest extends BaseTest {
    method an_evaluation_listener_can_abort_after_one_result_using_fluent_api (line 13) | @Test
    method an_evaluation_listener_can_abort_after_one_result_using_configuration (line 25) | @Test
    method an_evaluation_lister_can_continue (line 39) | @Test
    method evaluation_results_can_be_limited (line 57) | @Test
    method multiple_evaluation_listeners_can_be_added (line 67) | @Test
    method evaluation_listeners_can_be_cleared (line 95) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java
  class FilterCompilerTest (line 9) | public class FilterCompilerTest {
    method valid_filters_compile (line 11) | @Test
    method string_quote_style_is_serialized (line 52) | @Test
    method string_can_contain_path_chars (line 58) | @Test
    method invalid_path_when_string_literal_is_unquoted (line 64) | @Test
    method or_has_lower_priority_than_and (line 69) | @Test
    method invalid_filters_does_not_compile (line 75) | @Test
    method compile_and_serialize_not_exists_filter (line 88) | @Test
    method assertInvalidPathException (line 97) | private void assertInvalidPathException(String filter) {

FILE: json-path/src/test/java/com/jayway/jsonpath/FilterParseTest.java
  class FilterParseTest (line 14) | public class FilterParseTest {
    method a_filter_can_be_parsed (line 16) | @Test
    method an_invalid_filter_can_not_be_parsed (line 25) | @Test
    method a_gte_filter_can_be_serialized (line 49) | @Test
    method a_lte_filter_can_be_serialized (line 58) | @Test
    method a_eq_filter_can_be_serialized (line 67) | @Test
    method a_ne_filter_can_be_serialized (line 76) | @Test
    method a_lt_filter_can_be_serialized (line 85) | @Test
    method a_gt_filter_can_be_serialized (line 94) | @Test
    method a_nin_filter_can_be_serialized (line 103) | @Test
    method a_in_filter_can_be_serialized (line 111) | @Test
    method a_contains_filter_can_be_serialized (line 120) | @Test
    method a_all_filter_can_be_serialized (line 128) | @Test
    method a_size_filter_can_be_serialized (line 137) | @Test
    method a_subsetof_filter_can_be_serialized (line 146) | @Test
    method a_anyof_filter_can_be_serialized (line 155) | @Test
    method a_noneof_filter_can_be_serialized (line 164) | @Test
    method a_exists_filter_can_be_serialized (line 173) | @Test
    method a_not_exists_filter_can_be_serialized (line 183) | @Test
    method a_type_filter_can_be_serialized (line 192) | @Test
    method a_matches_filter_can_be_serialized (line 197) | @Test
    method a_not_empty_filter_can_be_serialized (line 204) | @Test
    method and_filter_can_be_serialized (line 213) | @Test
    method in_string_filter_can_be_serialized (line 222) | @Test
    method a_deep_path_filter_can_be_serialized (line 231) | @Test
    method a_regex_filter_can_be_serialized (line 240) | @Test
    method a_doc_ref_filter_can_be_serialized (line 245) | @Test
    method and_combined_filters_can_be_serialized (line 251) | @Test
    method or_combined_filters_can_be_serialized (line 265) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/FilterTest.java
  class FilterTest (line 16) | public class FilterTest extends BaseTest {
    method int_eq_evals (line 41) | @Test
    method int_eq_string_evals (line 47) | @Test
    method long_eq_evals (line 62) | @Test
    method double_eq_evals (line 68) | @Test
    method string_eq_evals (line 75) | @Test
    method boolean_eq_evals (line 81) | @Test
    method null_eq_evals (line 87) | @Test
    method arr_eq_evals (line 94) | @Test
    method int_ne_evals (line 106) | @Test
    method long_ne_evals (line 112) | @Test
    method double_ne_evals (line 118) | @Test
    method string_ne_evals (line 125) | @Test
    method boolean_ne_evals (line 131) | @Test
    method null_ne_evals (line 137) | @Test
    method int_lt_evals (line 149) | @Test
    method long_lt_evals (line 155) | @Test
    method double_lt_evals (line 161) | @Test
    method string_lt_evals (line 167) | @Test
    method int_lte_evals (line 178) | @Test
    method long_lte_evals (line 185) | @Test
    method double_lte_evals (line 192) | @Test
    method int_gt_evals (line 204) | @Test
    method long_gt_evals (line 210) | @Test
    method double_gt_evals (line 216) | @Test
    method string_gt_evals (line 222) | @Test
    method int_gte_evals (line 233) | @Test
    method long_gte_evals (line 240) | @Test
    method double_gte_evals (line 247) | @Test
    method string_regex_evals (line 259) | @Test
    method list_regex_evals (line 267) | @Test
    method obj_regex_doesnt_break (line 273) | @Test
    method json_evals (line 283) | @Test
    method string_in_evals (line 304) | @Test
    method string_nin_evals (line 318) | @Test
    method int_all_evals (line 333) | @Test
    method string_all_evals (line 338) | @Test
    method not_array_all_evals (line 343) | @Test
    method array_size_evals (line 353) | @Test
    method string_size_evals (line 359) | @Test
    method other_size_evals (line 365) | @Test
    method null_size_evals (line 370) | @Test
    method array_subsetof_evals (line 380) | @Test
    method array_anyof_evals (line 398) | @Test
    method array_noneof_evals (line 413) | @Test
    method exists_evals (line 428) | @Test
    method type_evals (line 442) | @Test
    method not_empty_evals (line 460) | @Test
    method empty_evals (line 476) | @Test
    method matches_evals (line 501) | @Test
    method or_and_filters_evaluates (line 523) | @Test
    method testFilterWithOrShortCircuit1 (line 545) | @Test
    method testFilterWithOrShortCircuit2 (line 551) | @Test
    method criteria_can_be_parsed (line 557) | @Test
    method inline_in_criteria_evaluates (line 568) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/GsonJsonProviderTest.java
  class GsonJsonProviderTest (line 21) | public class GsonJsonProviderTest extends BaseTest {
    method json_can_be_parsed (line 45) | @Test
    method strings_are_unwrapped (line 51) | @Test
    method ints_are_unwrapped (line 60) | @Test
    method longs_are_unwrapped (line 69) | @Test
    method doubles_are_unwrapped (line 78) | @Test
    method bigdecimals_are_unwrapped (line 89) | @Test
    method small_bigdecimals_are_unwrapped (line 101) | @Test
    method bigintegers_are_unwrapped (line 113) | @Test
    method small_bigintegers_are_unwrapped (line 125) | @Test
    method int_to_long_mapping (line 137) | @Test
    method an_Integer_can_be_converted_to_a_Double (line 142) | @Test
    method list_of_numbers (line 147) | @Test
    method an_object_can_be_mapped_to_pojo (line 157) | @Test
    method test_type_ref (line 175) | @Test
    method test_type_ref_fail (line 185) | @Test
    method no_error_when_mapping_null (line 193) | @Test
    class FooBarBaz (line 212) | public static class FooBarBaz<T> {
    class Gen (line 220) | public static class Gen {
    class TestClazz (line 224) | public static class TestClazz {

FILE: json-path/src/test/java/com/jayway/jsonpath/InlineFilterTest.java
  class InlineFilterTest (line 17) | public class InlineFilterTest extends BaseTest {
    method configurations (line 64) | public static Iterable<Configuration> configurations() {
    method root_context_can_be_referred_in_predicate (line 69) | @ParameterizedTest
    method asDouble (line 77) | private Double asDouble(Object object) {
    method multiple_context_object_can_be_refered (line 82) | @ParameterizedTest
    method simple_inline_or_statement_evaluates (line 103) | @ParameterizedTest
    method no_path_ref_in_filter_hit_all (line 121) | public void no_path_ref_in_filter_hit_all() {
    method no_path_ref_in_filter_hit_none (line 129) | @Test
    method path_can_be_on_either_side_of_operator (line 138) | @Test
    method path_can_be_on_both_side_of_operator (line 147) | @Test
    method patterns_can_be_evaluated (line 154) | @Test
    method patterns_can_be_evaluated_with_ignore_case (line 163) | @Test
    method patterns_match_against_lists (line 172) | @Test
    method negate_exists_check (line 178) | @Test
    method negate_exists_check_primitive (line 188) | @Test
    method equality_check_does_not_break_evaluation (line 209) | @ParameterizedTest
    method lt_check_does_not_break_evaluation (line 226) | @ParameterizedTest
    method escaped_literals (line 243) | @ParameterizedTest
    method escaped_literals2 (line 256) | @ParameterizedTest
    method escape_pattern (line 266) | @ParameterizedTest
    method escape_pattern_after_literal (line 272) | @ParameterizedTest
    method escape_pattern_before_literal (line 278) | @ParameterizedTest
    method filter_evaluation_does_not_break_path_evaluation (line 284) | @ParameterizedTest

FILE: json-path/src/test/java/com/jayway/jsonpath/Issue_487.java
  class Issue_487 (line 5) | public class Issue_487 {
    method test_read_with_comma_1 (line 9) | @Test//(expected = InvalidPathException.class)
    method test_read_with_comma_2 (line 18) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/Issue_537.java
  class Issue_537 (line 7) | public class Issue_537 {
    method test_read (line 11) | @Test
    method test_renameKey (line 17) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/Issue_721.java
  class Issue_721 (line 5) | public class Issue_721 {
    method test_delete_1 (line 9) | @Test
    method test_delete_2 (line 19) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/Issue_762.java
  class Issue_762 (line 10) | public class Issue_762 {
    method testParseJsonValue (line 11) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/Issue_786.java
  class Issue_786 (line 10) | public class Issue_786 extends BaseTest{
    method test (line 12) | @Test
    method bookLength (line 19) | private int bookLength() {

FILE: json-path/src/test/java/com/jayway/jsonpath/Issue_970.java
  class Issue_970 (line 7) | public class Issue_970 {
    method shouldNotCauseStackOverflow (line 8) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/Issue_973.java
  class Issue_973 (line 7) | public class Issue_973 {
    method shouldNotCauseStackOverflow (line 8) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/Jackson3JsonNodeJsonProviderMapperSupportTest.java
  class Jackson3JsonNodeJsonProviderMapperSupportTest (line 16) | public class Jackson3JsonNodeJsonProviderMapperSupportTest {
    method mapMethod_withJacksonJsonNodeJsonProvider_shouldUsingJsonNodeForMappingValues (line 18) | @ParameterizedTest
    method readMethod_withJacksonJsonNodeJsonProvider_shouldReturnJsonNode (line 32) | @ParameterizedTest
    method setMethod_withJacksonJsonNodeJsonProvider_shouldAcceptJsonNode (line 42) | @ParameterizedTest
    class TestData (line 52) | private static class TestData {
      method TestData (line 61) | public TestData(
    method testDataSource (line 78) | public static List<TestData> testDataSource() throws Exception {
    method cloneDocumentContext (line 140) | private static DocumentContext cloneDocumentContext(DocumentContext do...

FILE: json-path/src/test/java/com/jayway/jsonpath/Jackson3JsonNodeJsonProviderTest.java
  class Jackson3JsonNodeJsonProviderTest (line 29) | public class Jackson3JsonNodeJsonProviderTest extends BaseTest {
    method json_can_be_parsed (line 53) | @Test
    method bytes_json_can_be_parsed (line 59) | @Test
    method always_return_same_object (line 66) | @Test
    method strings_are_unwrapped (line 80) | @Test
    method ints_are_unwrapped (line 89) | @Test
    method longs_are_unwrapped (line 97) | @Test
    method list_of_numbers (line 106) | @Test
    method bigdecimals_are_unwrapped (line 124) | @Test
    method small_bigdecimals_are_unwrapped (line 137) | @Test
    method bigintegers_are_unwrapped (line 158) | @Test
    method small_bigintegers_are_unwrapped (line 171) | @Test
    method test_type_ref (line 184) | @Test
    method test_type_ref_fail (line 193) | @Test
    method mapPropertyWithPOJO (line 200) | @Test
    method setPropertyWithPOJO (line 225) | @Test
    method empty_array_check_works (line 235) | public void empty_array_check_works() throws IOException {
    class FooBarBaz (line 262) | public static class FooBarBaz<T> {
    class Gen (line 270) | public static class Gen {
    class Data (line 274) | public static final class Data {
      method Data (line 278) | @JsonCreator

FILE: json-path/src/test/java/com/jayway/jsonpath/Jackson3Test.java
  class Jackson3Test (line 11) | public class Jackson3Test extends BaseTest {
    method an_object_can_be_mapped_to_pojo (line 13) | @Test
    class FooBarBaz (line 37) | public static class FooBarBaz {
    method jackson_converts_dates (line 43) | @Test
    method single_quotes_work_with_in_filter (line 55) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderMapperSupportTest.java
  class JacksonJsonNodeJsonProviderMapperSupportTest (line 16) | public class JacksonJsonNodeJsonProviderMapperSupportTest {
    method mapMethod_withJacksonJsonNodeJsonProvider_shouldUsingJsonNodeForMappingValues (line 18) | @ParameterizedTest
    method readMethod_withJacksonJsonNodeJsonProvider_shouldReturnJsonNode (line 32) | @ParameterizedTest
    method setMethod_withJacksonJsonNodeJsonProvider_shouldAcceptJsonNode (line 42) | @ParameterizedTest
    class TestData (line 52) | private static class TestData {
      method TestData (line 61) | public TestData(
    method testDataSource (line 78) | public static List<TestData> testDataSource() throws Exception {
    method cloneDocumentContext (line 140) | private static DocumentContext cloneDocumentContext(DocumentContext do...

FILE: json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java
  class JacksonJsonNodeJsonProviderTest (line 29) | public class JacksonJsonNodeJsonProviderTest extends BaseTest {
    method json_can_be_parsed (line 53) | @Test
    method bytes_json_can_be_parsed (line 59) | @Test
    method always_return_same_object (line 66) | @Test
    method strings_are_unwrapped (line 80) | @Test
    method ints_are_unwrapped (line 89) | @Test
    method longs_are_unwrapped (line 97) | @Test
    method list_of_numbers (line 106) | @Test
    method bigdecimals_are_unwrapped (line 123) | @Test
    method small_bigdecimals_are_unwrapped (line 136) | @Test
    method bigintegers_are_unwrapped (line 156) | @Test
    method small_bigintegers_are_unwrapped (line 169) | @Test
    method test_type_ref (line 182) | @Test
    method test_type_ref_fail (line 191) | @Test
    method mapPropertyWithPOJO (line 198) | @Test
    method setPropertyWithPOJO (line 223) | @Test
    method empty_array_check_works (line 233) | public void empty_array_check_works() throws IOException {
    class FooBarBaz (line 260) | public static class FooBarBaz<T> {
    class Gen (line 268) | public static class Gen {
    class Data (line 272) | public static final class Data {
      method Data (line 276) | @JsonCreator

FILE: json-path/src/test/java/com/jayway/jsonpath/JacksonTest.java
  class JacksonTest (line 12) | public class JacksonTest extends BaseTest {
    method an_object_can_be_mapped_to_pojo (line 14) | @Test
    class FooBarBaz (line 38) | public static class FooBarBaz {
    method jackson_converts_dates (line 44) | @Test
    method single_quotes_work_with_in_filter (line 56) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/JakartaJsonProviderTest.java
  class JakartaJsonProviderTest (line 20) | public class JakartaJsonProviderTest extends BaseTest {
    method an_object_can_be_read (line 24) | @Test
    method an_object_can_be_read_from_bytes (line 33) | @Test
    method a_property_can_be_read (line 42) | @Test
    method a_filter_can_be_applied (line 51) | @Test
    method result_can_be_mapped_to_object (line 60) | @Test
    method read_books_with_isbn (line 70) | @Test
    method read_book_length_using_translated_query (line 84) | @Test
    method read_book_length (line 92) | @Test
    method issue_97 (line 100) | @Test
    method test_delete_2 (line 125) | @Test
    method an_root_property_can_be_updated (line 139) | @Test
    method an_deep_scan_can_update (line 152) | @Test
    method an_filter_can_update (line 166) | @Test
    method a_path_can_be_deleted (line 181) | @Test
    method operations_can_chained (line 196) | @Test
    method an_array_index_can_be_updated (line 215) | @Test
    method an_array_slice_can_be_updated (line 225) | @Test
    method an_array_criteria_can_be_updated (line 236) | @Test
    method an_array_criteria_can_be_deleted (line 247) | @Test
    method an_array_criteria_with_multiple_results_can_be_deleted (line 258) | @Test
    method multi_prop_delete (line 267) | @Test
    method multi_prop_update (line 278) | @Test
    method add_to_array (line 293) | @Test
    method add_to_object (line 303) | @Test
    method add_to_object_on_array (line 313) | @Test
    method add_to_array_on_object (line 318) | @Test
    method a_path_can_be_renamed (line 323) | @Test
    method map_array_items_can_be_renamed (line 334) | @Test
    method non_existent_key_rename_not_allowed (line 344) | @Test
    method single_match_value_can_be_mapped (line 352) | @Test
    method object_can_be_mapped (line 362) | @Test
    method multi_match_path_can_be_mapped (line 375) | @Test
    class ToStringMapFunction (line 397) | private class ToStringMapFunction implements MapFunction {
      method map (line 399) | @Override

FILE: json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java
  class JsonOrgJsonProviderTest (line 15) | public class JsonOrgJsonProviderTest extends BaseTest {
    method an_object_can_be_read (line 18) | @Test
    method a_property_can_be_read (line 26) | @Test
    method a_filter_can_be_applied (line 34) | @Test
    method result_can_be_mapped_to_object (line 42) | @Test
    method read_books_with_isbn (line 50) | @Test
    method read_book_length_using_translated_query (line 65) | @Test
    method read_book_length (line 73) | @Test
    method test_getPropertyKeys_empty_object (line 81) | @Test
    method test_getPropertyKeys_empty_nest_object (line 91) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/JsonProviderTest.java
  class JsonProviderTest (line 9) | public class JsonProviderTest extends BaseTest {
    method configurations (line 11) | public static Iterable<Configuration> configurations() {
    method strings_are_unwrapped (line 16) | @ParameterizedTest
    method integers_are_unwrapped (line 23) | @ParameterizedTest
    method ints_are_unwrapped (line 30) | @ParameterizedTest

FILE: json-path/src/test/java/com/jayway/jsonpath/JsonProviderTestObjectMapping.java
  class JsonProviderTestObjectMapping (line 12) | public class JsonProviderTestObjectMapping extends BaseTest {
    method configurations (line 36) | public static Iterable<Configuration> configurations() {
    method list_of_numbers (line 41) | @ParameterizedTest
    method test_type_ref (line 52) | @ParameterizedTest
    class FooBarBaz (line 62) | public static class FooBarBaz<T> {
    class Sub (line 69) | public static class Sub {

FILE: json-path/src/test/java/com/jayway/jsonpath/MapperTest.java
  class MapperTest (line 12) | public class MapperTest extends BaseTest {
    method an_Integer_can_be_converted_to_a_Long (line 15) | @Test
    method an_String_can_be_converted_to_a_Long (line 20) | @Test
    method an_Integer_can_be_converted_to_a_String (line 25) | @Test
    method an_Integer_can_be_converted_to_a_Double (line 30) | @Test
    method a_BigDecimal_can_be_converted_to_a_Long (line 35) | @Test
    method a_Long_can_be_converted_to_a_Date (line 40) | @Test
    method a_String_can_be_converted_to_a_BigInteger (line 46) | @Test
    method a_String_can_be_converted_to_a_BigDecimal (line 51) | @Test
    method a_Boolean_can_be_converted_to_a_primitive_boolean (line 56) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/MultiPropTest.java
  class MultiPropTest (line 14) | public class MultiPropTest {
    method multi_prop_can_be_read_from_root (line 16) | @Test
    method multi_props_can_be_defaulted_to_null (line 36) | @Test
    method multi_props_can_be_required (line 52) | @Test
    method multi_props_can_be_non_leafs (line 66) | @Test
    method nonexistent_non_leaf_multi_props_ignored (line 73) | @Test
    method multi_props_with_post_filter (line 80) | @Test
    method deep_scan_does_not_affect_non_leaf_multi_props (line 87) | @Test
    method multi_props_can_be_in_the_middle (line 98) | @Test
    method non_leaf_multi_props_can_be_required (line 114) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/OptionsTest.java
  class OptionsTest (line 18) | public class OptionsTest extends BaseTest {
    method a_leafs_is_not_defaulted_to_null (line 20) | @Test
    method a_leafs_can_be_defaulted_to_null (line 28) | @Test
    method a_definite_path_is_not_returned_as_list_by_default (line 36) | @Test
    method a_definite_path_can_be_returned_as_list (line 44) | @Test
    method an_indefinite_path_can_be_returned_as_list (line 57) | @Test
    method a_path_evaluation_is_returned_as_VALUE_by_default (line 69) | @Test
    method a_path_evaluation_can_be_returned_as_PATH_LIST (line 76) | @Test
    method multi_properties_are_merged_by_default (line 85) | @Test
    method when_property_is_required_exception_is_thrown (line 105) | @Test
    method when_property_is_required_exception_is_thrown_2 (line 123) | @Test
    method issue_suppress_exceptions_does_not_break_indefinite_evaluation (line 144) | @Test
    method isbn_is_defaulted_when_option_is_provided (line 157) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java
  class PathCompilerTest (line 12) | public class PathCompilerTest {
    method a_path_must_start_with_$_or_at (line 15) | @Disabled("Backward compatibility <= 2.0.0")
    method a_square_bracket_may_not_follow_a_period (line 21) | @Disabled("Backward compatibility <= 2.0.0")
    method a_root_path_must_be_followed_by_period_or_bracket (line 27) | @Test
    method a_root_path_can_be_compiled (line 32) | @Test
    method a_path_may_not_end_with_period (line 38) | @Test
    method a_path_may_not_end_with_period_2 (line 43) | @Test
    method a_path_may_not_end_with_scan (line 48) | @Test
    method a_path_may_not_end_with_scan_2 (line 53) | @Test
    method a_property_token_can_be_compiled (line 58) | @Test
    method a_bracket_notation_property_token_can_be_compiled (line 65) | @Test
    method a_multi_property_token_can_be_compiled (line 74) | @Test
    method a_property_chain_can_be_compiled (line 80) | @Test
    method a_property_may_not_contain_blanks (line 87) | @Test
    method a_wildcard_can_be_compiled (line 92) | @Test
    method a_wildcard_can_follow_a_property (line 99) | @Test
    method an_array_index_path_can_be_compiled (line 105) | @Test
    method an_array_slice_path_can_be_compiled (line 112) | @Test
    method an_inline_criteria_can_be_parsed (line 119) | @Test
    method a_placeholder_criteria_can_be_parsed (line 125) | @Test
    method a_scan_token_can_be_parsed (line 139) | @Test
    method issue_predicate_can_have_escaped_backslash_in_prop (line 144) | @Test
    method issue_predicate_can_have_bracket_in_regex (line 161) | @Test
    method issue_predicate_can_have_and_in_regex (line 177) | @Test
    method issue_predicate_can_have_and_in_prop (line 193) | @Test
    method issue_predicate_brackets_must_change_priorities (line 209) | @Test
    method issue_predicate_or_has_lower_priority_than_and (line 226) | @Test
    method issue_predicate_can_have_double_quotes (line 240) | @Test
    method issue_predicate_can_have_single_quotes (line 253) | @Test
    method issue_predicate_can_have_single_quotes_escaped (line 268) | @Test
    method issue_predicate_can_have_square_bracket_in_prop (line 283) | @Test
    method a_function_can_be_compiled (line 299) | @Test
    method array_indexes_must_be_separated_by_commas (line 307) | @Test
    method trailing_comma_after_list_is_not_accepted (line 312) | @Test
    method accept_only_a_single_comma_between_indexes (line 317) | @Test
    method property_must_be_separated_by_commas (line 322) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/PredicateTest.java
  class PredicateTest (line 11) | public class PredicateTest extends BaseTest {
    method predicates_filters_can_be_applied (line 15) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/ProviderInTest.java
  class ProviderInTest (line 14) | public class ProviderInTest {
    method testJsonPathQuotesJackson (line 26) | @Test
    method testJsonPathQuotesJacksonJsonNode (line 45) | @Test
    method testJsonPathQuotesJackson3 (line 63) | @Test
    method testJsonPathQuotesJackson3JsonNode (line 81) | @Test
    method testJsonPathQuotesGson (line 99) | @Test
    method testJsonPathQuotesJsonOrg (line 117) | @Test
    method testJsonPathQuotesJsonSmart (line 135) | @Test
    method testJsonPathQuotesJakarta (line 153) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/ReadContextTest.java
  class ReadContextTest (line 8) | public class ReadContextTest extends BaseTest {
    method json_can_be_fetched_as_string (line 10) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/ReturnTypeTest.java
  class ReturnTypeTest (line 14) | @SuppressWarnings("ALL")
    method assert_strings_can_be_read (line 20) | @Test
    method assert_ints_can_be_read (line 25) | @Test
    method assert_longs_can_be_read (line 30) | @Test
    method assert_boolean_values_can_be_read (line 35) | @Test
    method assert_null_values_can_be_read (line 40) | @Test
    method assert_arrays_can_be_read (line 45) | @Test
    method assert_maps_can_be_read (line 57) | @Test
    method a_path_evaluation_can_be_returned_as_PATH_LIST (line 68) | @Test
    method class_cast_exception_is_thrown_when_return_type_is_not_expected (line 82) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/ScientificNotationTest.java
  class ScientificNotationTest (line 12) | public class ScientificNotationTest extends BaseTest {
    method testScientificNotation (line 22) | @Test
    method testScientificNotation_lt_gt (line 30) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/TapestryJsonProviderTest.java
  class TapestryJsonProviderTest (line 13) | public class TapestryJsonProviderTest extends BaseTest {
    method an_object_can_be_read (line 15) | @Test
    method a_property_can_be_read (line 23) | @Test
    method a_filter_can_be_applied (line 31) | @Test
    method result_can_be_mapped_to_object (line 40) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/TestSuppressExceptions.java
  class TestSuppressExceptions (line 15) | public class TestSuppressExceptions {
    method testSuppressExceptionsIsRespected (line 17) | @Test
    method testSuppressExceptionsIsRespectedPath (line 27) | @Test
    method testSuppressExceptionsIsRespectedJackson3 (line 38) | @Test
    method testSuppressExceptionsIsRespectedPathJackson3 (line 48) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/TestUtils.java
  class TestUtils (line 7) | public final class TestUtils {
    method TestUtils (line 8) | private TestUtils() {}
    method assertEvaluationThrows (line 10) | public static void assertEvaluationThrows(final String json, final Str...
    method assertEvaluationThrows (line 23) | public static void assertEvaluationThrows(final String json, final Str...
    method assertHasNoResults (line 40) | public static void assertHasNoResults(final String json, final String ...
    method assertHasOneResult (line 49) | public static void assertHasOneResult(final String json, final String ...
    method assertHasResults (line 60) | public static void assertHasResults(final String json, final String pa...

FILE: json-path/src/test/java/com/jayway/jsonpath/WriteTest.java
  class WriteTest (line 16) | public class WriteTest extends BaseTest {
    method an_array_child_property_can_be_updated (line 20) | @Test
    method an_root_property_can_be_updated (line 31) | @Test
    method an_deep_scan_can_update (line 41) | @Test
    method an_filter_can_update (line 52) | @Test
    method a_path_can_be_deleted (line 62) | @Test
    method operations_can_chained (line 72) | @Test
    method an_array_can_be_updated (line 87) | @Test
    method an_array_index_can_be_updated (line 95) | @Test
    method an_array_slice_can_be_updated (line 103) | @Test
    method an_array_criteria_can_be_updated (line 111) | @Test
    method an_array_criteria_can_be_deleted (line 121) | @Test
    method an_array_criteria_with_multiple_results_can_be_deleted (line 131) | @Test
    method multi_prop_delete (line 142) | @Test
    method multi_prop_update (line 150) | @Test
    method multi_prop_update_not_all_defined (line 164) | @Test
    method add_to_array (line 177) | @Test
    method add_to_object (line 183) | @Test
    method item_can_be_added_to_root_array (line 189) | @Test
    method key_val_can_be_added_to_root_object (line 200) | @Test
    method add_to_object_on_array (line 210) | @Test
    method add_to_array_on_object (line 215) | @Test
    method root_object_can_not_be_updated (line 221) | @Test
    method a_path_can_be_renamed (line 229) | @Test
    method keys_in_root_containing_map_can_be_renamed (line 237) | @Test
    method map_array_items_can_be_renamed (line 244) | @Test
    method non_map_array_items_cannot_be_renamed (line 251) | @Test
    method multiple_properties_cannot_be_renamed (line 259) | @Test
    method non_existent_key_rename_not_allowed (line 264) | @Test
    method rootCannotBeMapped (line 269) | @Test
    method single_match_value_can_be_mapped (line 280) | @Test
    method object_can_be_mapped (line 287) | @Test
    method multi_match_path_can_be_mapped (line 299) | @Test
    class ToStringMapFunction (line 314) | private class ToStringMapFunction implements MapFunction {
      method map (line 316) | @Override

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/JsonContextTest.java
  class JsonContextTest (line 13) | public class JsonContextTest extends BaseTest {
    method cached_path_with_predicates (line 15) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/UtilsTest.java
  class UtilsTest (line 9) | public class UtilsTest {
    method testJoin (line 12) | @Test
    method testConcat (line 23) | @Test
    method testEscape (line 33) | @Test
    method testUnescape (line 41) | @Test
    method testUnescapeThrow (line 59) | @Test
    method testHex (line 64) | @Test
    method testIsEmpty (line 70) | @Test
    method testIndexOf (line 78) | @Test
    method testNotNull (line 86) | @Test
    method testNotNullThrow (line 92) | @Test
    method testCloseQuietly (line 97) | @Test
    method testIsTrue (line 102) | @Test
    method testIsTrueThrow (line 107) | @Test
    method testOnlyOneIsTrueThrow1 (line 112) | @Test
    method testOnlyOneIsTrueThrow2 (line 117) | @Test
    method testOnlyOneIsTrueNonThrow (line 122) | @Test
    method testNotEmpty (line 131) | @Test
    method testNotEmptyThrowNull (line 137) | @Test
    method testNotEmptyThrowLength0 (line 142) | @Test
    method testToString (line 147) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/filter/PatternFlagTest.java
  class PatternFlagTest (line 12) | public class PatternFlagTest extends BaseTest {
    method testParseFlags (line 15) | @ParameterizedTest
    method testData (line 21) | public static Stream<Arguments> testData() {

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/filter/RegexpEvaluatorTest.java
  class RegexpEvaluatorTest (line 20) | public class RegexpEvaluatorTest extends BaseTest {
    method should_evaluate_regular_expression (line 23) | @ParameterizedTest
    method testData (line 38) | public static Stream<Arguments> testData() {
    method path (line 64) | private static Path path() {
    method json (line 68) | private static String json() {
    method createPredicateContext (line 72) | private Predicate.PredicateContext createPredicateContext() {

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/filter/RelationalOperatorTest.java
  class RelationalOperatorTest (line 11) | public class RelationalOperatorTest {
    method saveDefaultLocale (line 15) | @BeforeEach
    method restoreDefaultLocale (line 20) | @AfterEach
    method testFromStringWithEnglishLocale (line 25) | @Test
    method testFromStringWithTurkishLocale (line 32) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/function/BaseFunctionTest.java
  class BaseFunctionTest (line 14) | public class BaseFunctionTest {
    method verifyFunction (line 31) | protected void verifyFunction(Configuration conf, String pathExpr, Str...
    method verifyMathFunction (line 36) | protected void verifyMathFunction(Configuration conf, String pathExpr,...
    method verifyTextFunction (line 40) | protected void verifyTextFunction(Configuration conf, String pathExpr,...
    method verifyTextAndNumberFunction (line 44) | protected void verifyTextAndNumberFunction(Configuration conf, String ...
    method getResourceAsText (line 48) | protected String getResourceAsText(String resourceName) throws IOExcep...

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/function/Issue191.java
  class Issue191 (line 17) | public class Issue191 {
    method testResultSetNumericComputation (line 21) | @Test
    method testResultSetNumericComputationTail (line 28) | @Test
    method testResultSetNumericComputationRecursiveReplacement (line 35) | @Test
    method testMultipleResultSetSums (line 42) | @Test
    method testConcatResultSet (line 49) | @Test
    method testConcatWithNumericValueAsString (line 56) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/function/Issue234.java
  class Issue234 (line 26) | public class Issue234 {
    method testIssue234 (line 28) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/function/Issue273.java
  class Issue273 (line 8) | public class Issue273 {
    method testGetPropertyFromArray (line 9) | @Test
    method testGetPropertyFromObject (line 50) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/function/Issue612.java
  class Issue612 (line 10) | public class Issue612 {
    method test (line 11) | @Test
    method test2 (line 23) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/function/Issue629.java
  class Issue629 (line 12) | public class Issue629 {
    method testUncloseParenthesis (line 13) | @Test
    method testUncloseParenthesisWithNestedCall (line 23) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/function/Issue680.java
  class Issue680 (line 11) | public class Issue680 {
    method testIssue680concat (line 13) | @Test
    method testIssue680min (line 23) | @Test
    method testIssue680concat_2 (line 33) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/function/JSONEntityPathFunctionTest.java
  class JSONEntityPathFunctionTest (line 14) | public class JSONEntityPathFunctionTest extends BaseFunctionTest {
    method testLengthOfTextArray (line 57) | @Test
    method testLengthOfNumberArray (line 63) | @Test
    method testLengthOfStructure (line 71) | @Test
    method testPredicateWithFunctionCallSingleMatch (line 86) | @Test
    method testPredicateWithFunctionCallTwoMatches (line 97) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/function/KeySetFunctionTest.java
  class KeySetFunctionTest (line 15) | public class KeySetFunctionTest extends BaseFunctionTest {
    method testKeySet (line 19) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/function/NestedFunctionTest.java
  class NestedFunctionTest (line 16) | public class NestedFunctionTest extends BaseFunctionTest {
    method configurations (line 20) | public static Iterable<Configuration> configurations() {
    method testParameterAverageFunctionCall (line 25) | @ParameterizedTest
    method testArrayAverageFunctionCall (line 32) | @ParameterizedTest
    method testArrayAverageFunctionCallWithParameters (line 47) | @ParameterizedTest
    method testJsonInnerArgumentArray (line 54) | @ParameterizedTest
    method testSimpleLiteralArgument (line 61) | @ParameterizedTest
    method testStringConcat (line 69) | @ParameterizedTest
    method testStringAndNumberConcat (line 76) | @ParameterizedTest
    method testStringConcatWithJSONParameter (line 83) | @ParameterizedTest
    method testAppendNumber (line 90) | @ParameterizedTest
    method testAppendTextAndNumberThenSum (line 100) | @ParameterizedTest
    method testErrantCloseBraceNegative (line 107) | @ParameterizedTest
    method testErrantCloseBracketNegative (line 119) | @ParameterizedTest
    method testUnclosedFunctionCallNegative (line 131) | @ParameterizedTest

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/function/NumericPathFunctionTest.java
  class NumericPathFunctionTest (line 24) | public class NumericPathFunctionTest extends BaseFunctionTest {
    method configurations (line 26) | public static Iterable<Configuration> configurations() {
    method testAverageOfDoubles (line 31) | @ParameterizedTest
    method testAverageOfEmptyListNegative (line 37) | @ParameterizedTest
    method testSumOfDouble (line 47) | @ParameterizedTest
    method testSumOfEmptyListNegative (line 53) | @ParameterizedTest
    method testMaxOfDouble (line 63) | @ParameterizedTest
    method testMaxOfEmptyListNegative (line 69) | @ParameterizedTest
    method testMinOfDouble (line 79) | @ParameterizedTest
    method testMinOfEmptyListNegative (line 85) | @ParameterizedTest
    method testStdDevOfDouble (line 96) | @ParameterizedTest
    method testStddevOfEmptyListNegative (line 102) | @ParameterizedTest

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/function/SequentialPathFunctionTest.java
  class SequentialPathFunctionTest (line 16) | public class SequentialPathFunctionTest extends BaseFunctionTest {
    method testFirstOfNumbers (line 20) | @Test
    method testLastOfNumbers (line 25) | @Test
    method testIndexOfNumbers (line 30) | @Test
    method testFirstOfText (line 37) | @Test
    method testLastOfText (line 42) | @Test
    method testIndexOfText (line 47) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/internal/path/PathTokenTest.java
  class PathTokenTest (line 10) | public class PathTokenTest extends BaseTest {
    method is_upstream_definite_in_simple_case (line 12) | @Test
    method is_upstream_definite_in_complex_case (line 25) | @Test
    method makePPT (line 35) | private PathToken makePPT(final String ... properties) {
    method makePathReturningTail (line 39) | private PathToken makePathReturningTail(final PathToken ... tokens) {

FILE: json-path/src/test/java/com/jayway/jsonpath/issue_613.java
  class issue_613 (line 15) | public class issue_613 extends BaseTest{
    method issue_613_eq_ne_test (line 25) | @Test
    method issue_613_lt_lte_test (line 30) | @Test
    method issue_613_gt_gte_test (line 35) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/ArraySlicingTest.java
  class ArraySlicingTest (line 30) | public class ArraySlicingTest {
    method get_by_position (line 34) | @Test
    method get_from_index (line 40) | @Test
    method get_between_index (line 46) | @Test
    method get_between_index_2 (line 53) | @Test
    method get_between_index_3 (line 59) | @Test
    method get_between_index_out_of_bounds (line 65) | @Test
    method get_from_tail_index (line 71) | @Test
    method get_from_tail (line 77) | @Test
    method get_indexes (line 83) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/ComplianceTest.java
  class ComplianceTest (line 17) | public class ComplianceTest {
    method test_one (line 19) | @Test
    method test_two (line 35) | @Test
    method test_three (line 53) | @Test
    method test_four (line 78) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/FilterTest.java
  class FilterTest (line 21) | public class FilterTest extends BaseTest {
    method is_filters_evaluates (line 62) | public void is_filters_evaluates() throws Exception {
    method ne_filters_evaluates (line 74) | @Test
    method gt_filters_evaluates (line 86) | @Test
    method gte_filters_evaluates (line 98) | @Test
    method lt_filters_evaluates (line 111) | @Test
    method lte_filters_evaluates (line 123) | @Test
    method in_filters_evaluates (line 135) | @Test
    method nin_filters_evaluates (line 152) | @Test
    method all_filters_evaluates (line 168) | @Test
    method size_filters_evaluates (line 177) | @Test
    method exists_filters_evaluates (line 188) | @Test
    method type_filters_evaluates (line 204) | @Test
    method pattern_filters_evaluates (line 231) | @Test
    method combine_filter_deep_criteria (line 244) | @Test
    method filters_can_be_combined (line 288) | @Test
    method arrays_of_maps_can_be_filtered (line 306) | @Test
    method arrays_of_objects_can_be_filtered (line 354) | @Test
    method filters_can_contain_json_path_expressions (line 371) | @Test
    method not_empty_filter_evaluates (line 378) | @Test
    method contains_filter_evaluates_on_array (line 412) | @Test
    method contains_filter_evaluates_on_string (line 458) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/IssuesTest.java
  class IssuesTest (line 37) | public class IssuesTest extends BaseTest {
    method issue_143 (line 41) | @Test
    method issue_114_a (line 53) | @Test
    method issue_114_b (line 64) | @Test
    method issue_114_c (line 72) | @Test
    method issue_114_d (line 80) | @Test
    method issue_151 (line 86) | @Test
    method full_ones_can_be_filtered (line 118) | @Test
    method issue_36 (line 131) | @Test
    method issue_11 (line 148) | @Test
    method issue_11b (line 155) | @Test
    method issue_15 (line 161) | @Test
    method issue_24 (line 198) | @Test
    method issue_28_string (line 219) | @Test
    method issue_37 (line 229) | @Test
    method issue_38 (line 255) | @Test
    method issue_39 (line 276) | @Test
    method issue_28_int (line 291) | @Test
    method issue_28_boolean (line 301) | @Test
    method issue_22 (line 312) | @Test
    method issue_22c (line 321) | @Test
    method issue_22b (line 331) | @Test
    method issue_26 (line 338) | @Test
    method issue_29_a (line 344) | @Test
    method issue_29_b (line 360) | @Test
    method issue_30 (line 368) | @Test
    method issue_32 (line 376) | @Test
    method issue_33 (line 382) | @Test
    method array_root (line 414) | @Test
    method a_test (line 428) | @Test
    method issue_42 (line 446) | @Test
    method issue_43 (line 460) | @Test
    method issue_45 (line 488) | @Test
    method issue_46 (line 495) | @Test
    method issue_x (line 513) | @Test
    method issue_60 (line 529) | @Test
    method stack_overflow_question_1 (line 585) | @Test
    method issue_71 (line 628) | @Test
    method issue_76 (line 644) | @Test
    method issue_79 (line 659) | @Test
    method issue_94_1 (line 677) | @Test
    method issue_94_2 (line 689) | @Test
    method issue_97 (line 737) | @Test
    method issue_99 (line 766) | @Test
    method issue_129 (line 789) | @Test
    method createPredicateContext (line 812) | private PredicateContext createPredicateContext(final Map<String, Inte...
    method issue_131 (line 836) | @Test
    method issue_131_2 (line 857) | @Test
    method issue_131_3 (line 883) | @Test
    method using_square_bracket_literal_path (line 904) | @Test
    method issue_90 (line 914) | @Test
    method github_89 (line 945) | @Test
    method issue_170 (line 956) | @Test
    method issue_170_jackson3 (line 977) | @Test
    method issue_171 (line 998) | @Test
    method issue_171_jackson3 (line 1016) | @Test
    method issue_309 (line 1034) | @Test
    method issue_378 (line 1054) | @Test
    method issue_620_1 (line 1081) | @Test
    method issue_620_2 (line 1114) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/JsonPathTest.java
  class JsonPathTest (line 16) | public class JsonPathTest extends BaseTest {
    method missing_prop (line 80) | @Test
    method bracket_notation_with_dots (line 88) | @Test
    method null_object_in_path (line 106) | @Test
    method array_start_expands (line 133) | @Test
    method bracket_notation_can_be_used_in_path (line 139) | @Test
    method filter_an_array (line 154) | @Test
    method filter_an_array_on_index (line 161) | @Test
    method read_path_with_colon (line 168) | @Test
    method read_document_from_root (line 173) | @Test
    method read_store_book_1 (line 181) | @Test
    method read_store_book_wildcard (line 191) | @Test
    method read_store_book_author (line 200) | @Test
    method all_authors (line 209) | @Test
    method all_store_properties (line 215) | @Test
    method all_prices_in_store (line 230) | @Test
    method access_array_by_index_from_tail (line 236) | @Test
    method read_store_book_index_0_and_1 (line 241) | @Test
    method read_store_book_pull_first_2 (line 247) | @Test
    method read_store_book_filter_by_isbn (line 254) | @Test
    method all_books_cheaper_than_10 (line 261) | @Test
    method all_books (line 267) | @Test
    method dot_in_predicate_works (line 272) | @Test
    method dots_in_predicate_works (line 277) | @Test
    method all_books_with_category_reference (line 282) | @Test
    method all_members_of_all_documents (line 288) | @Test
    method access_index_out_of_bounds_does_not_throw_exception (line 293) | @Test
    method exists_filter_with_nested_path (line 298) | @Test
    method invalid_paths_throw_invalid_path_exception (line 305) | @Test
    method prevent_stack_overflow_error_when_unclosed_property (line 319) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/JsonProviderTest.java
  class JsonProviderTest (line 6) | public class JsonProviderTest {
    method parse_document (line 50) | @Test
    method parse_array (line 60) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/NullHandlingTest.java
  class NullHandlingTest (line 15) | public class NullHandlingTest {
    method not_defined_property_throws_PathNotFoundException (line 39) | @Test
    method last_token_defaults_to_null (line 45) | @Test
    method null_property_returns_null (line 53) | @Test
    method the_age_of_all_with_age_defined (line 59) | @Test
    method path2 (line 68) | @Test
    method path (line 74) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/internal/ArrayIndexFilterTest.java
  class ArrayIndexFilterTest (line 12) | public class ArrayIndexFilterTest {
    method tail_does_not_throw_when_index_out_of_bounds (line 16) | @Test
    method head_does_not_throw_when_index_out_of_bounds (line 22) | @Test
    method head_grabs_correct (line 28) | @Test
    method tail_grabs_correct (line 35) | @Test
    method head_tail_grabs_correct (line 41) | @Test
    method can_access_items_from_end_with_negative_index (line 47) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/internal/ArrayPathTokenTest.java
  class ArrayPathTokenTest (line 12) | public class ArrayPathTokenTest extends TestBase {
    method array_can_select_multiple_indexes (line 16) | @Test
    method array_can_be_sliced_to_2 (line 26) | @Test
    method array_can_be_sliced_to_2_from_tail (line 37) | @Test
    method array_can_be_sliced_from_2 (line 48) | @Test
    method array_can_be_sliced_from_2_from_tail (line 59) | @Test
    method array_can_be_sliced_between (line 70) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/internal/PredicatePathTokenTest.java
  class PredicatePathTokenTest (line 14) | public class PredicatePathTokenTest {
    method a_filter_predicate_can_be_evaluated_on_string_criteria (line 87) | @Test
    method a_filter_predicate_can_be_evaluated_on_int_criteria (line 95) | @Test
    method a_filter_predicate_can_be_evaluated_on_decimal_criteria (line 104) | @Test
    method multiple_criteria_can_be_used (line 113) | @Test
    method field_existence_can_be_checked (line 122) | @Test
    method boolean_criteria_evaluates (line 131) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/internal/PropertyPathTokenTest.java
  class PropertyPathTokenTest (line 17) | public class PropertyPathTokenTest {
    method property_not_found (line 41) | @Test
    method property_not_found_deep (line 56) | @Test
    method property_not_found_option_throw (line 61) | @Test
    method map_value_can_be_read_from_map (line 66) | @Test
    method map_value_can_be_read_from_array (line 74) | @Test
    method map_value_can_be_read_from_child_map (line 82) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/internal/ScanPathTokenTest.java
  class ScanPathTokenTest (line 12) | public class ScanPathTokenTest {
    method a_document_can_be_scanned_for_property (line 89) | @Test
    method a_document_can_be_scanned_for_property_path (line 97) | @Test
    method a_document_can_be_scanned_for_wildcard (line 105) | @Test
    method a_document_can_be_scanned_for_wildcard2 (line 156) | @Test
    method a_document_can_be_scanned_for_wildcard3 (line 172) | @Test
    method a_document_can_be_scanned_for_predicate_match (line 183) | @Test
    method a_document_can_be_scanned_for_existence (line 194) | @Test

FILE: json-path/src/test/java/com/jayway/jsonpath/old/internal/TestBase.java
  class TestBase (line 8) | public class TestBase {

FILE: json-path/src/test/java/com/jayway/jsonpath/old/internal/TestInternal3.java
  class TestInternal3 (line 14) | public class TestInternal3 extends TestBase {
    method a_root_object_can_be_evaluated (line 30) | @Test
    method a_definite_array_item_property_can_be_evaluated (line 39) | @Test
    method a_wildcard_array_item_property_can_be_evaluated (line 47) | @Test
Condensed preview — 235 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,184K chars).
[
  {
    "path": ".github/workflows/ci.yml",
    "chars": 742,
    "preview": "---\nname: Java CI\n\non:\n  push:\n  pull_request:\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n   "
  },
  {
    "path": ".gitignore",
    "chars": 146,
    "preview": ".idea/\ntarget\n*.iws\n*.ipr\n*.iml\n.classpath\n.project\n.settings\n.springBeans\n.DS_Store\n.gradle\n.java-version\nTODO\ngradle.p"
  },
  {
    "path": ".travis.yml",
    "chars": 117,
    "preview": "language: java\n\nsudo: false\n\njdk:\n - openjdk17\n\ncache:\n  directories:\n  - $HOME/.gradle\n\narch:\n  - amd64\n  - ppc64le\n"
  },
  {
    "path": "LICENSE",
    "chars": 11337,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "Procfile",
    "chars": 173,
    "preview": "web: java $JAVA_OPTS -Dserver.http.port=$PORT -DresourceBase=json-path-web-test/build/resources/main/webapp/  -jar json-"
  },
  {
    "path": "README.md",
    "chars": 21058,
    "preview": "Jayway JsonPath\n=====================\n\n**A Java DSL for reading JSON documents.**\n\n[![Build Status](https://travis-ci.or"
  },
  {
    "path": "build.gradle",
    "chars": 5063,
    "preview": "buildscript {\n    repositories {\n        mavenCentral()\n        maven {\n            url \"https://plugins.gradle.org/m2/\""
  },
  {
    "path": "changelog.md",
    "chars": 3693,
    "preview": "2.2.0 (2016-02-29)\n===========\n* Upgraded dependency versions\n* Hamcrest-matcher support in json-path-assert\n* Bug fixes"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 200,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "gradlew",
    "chars": 8047,
    "preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "gradlew.bat",
    "chars": 2763,
    "preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
  },
  {
    "path": "json-path/build.gradle",
    "chars": 1160,
    "preview": "description = \"Java port of Stefan Goessner JsonPath.\"\n\njar {\n    bnd(\n            'Automatic-Module-Name': 'json.path',"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/Configuration.java",
    "chars": 9807,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/Criteria.java",
    "chars": 15152,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/DocumentContext.java",
    "chars": 715,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/EvaluationListener.java",
    "chars": 1697,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/Filter.java",
    "chars": 5198,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/InvalidCriteriaException.java",
    "chars": 1064,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/InvalidJsonException.java",
    "chars": 1563,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/InvalidModificationException.java",
    "chars": 804,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/InvalidPathException.java",
    "chars": 1045,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/JsonPath.java",
    "chars": 28577,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/JsonPathException.java",
    "chars": 1001,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/MapFunction.java",
    "chars": 805,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/Option.java",
    "chars": 2299,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/ParseContext.java",
    "chars": 1243,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/PathNotFoundException.java",
    "chars": 1122,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/Predicate.java",
    "chars": 1512,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/ReadContext.java",
    "chars": 3239,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/TypeRef.java",
    "chars": 1651,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/ValueCompareException.java",
    "chars": 1316,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/WriteContext.java",
    "chars": 5042,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/CharacterIndex.java",
    "chars": 9912,
    "preview": "package com.jayway.jsonpath.internal;\n\nimport com.jayway.jsonpath.InvalidPathException;\n\npublic class CharacterIndex {\n\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/DefaultsImpl.java",
    "chars": 919,
    "preview": "package com.jayway.jsonpath.internal;\n\nimport com.jayway.jsonpath.Configuration.Defaults;\nimport com.jayway.jsonpath.Opt"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/EvaluationAbortException.java",
    "chars": 343,
    "preview": "package com.jayway.jsonpath.internal;\n\npublic class EvaluationAbortException extends RuntimeException {\n\n  private stati"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/EvaluationContext.java",
    "chars": 2058,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java",
    "chars": 8038,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/JsonFormatter.java",
    "chars": 4209,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/ParseContextImpl.java",
    "chars": 2583,
    "preview": "package com.jayway.jsonpath.internal;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.DocumentCont"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/Path.java",
    "chars": 1961,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/PathRef.java",
    "chars": 12086,
    "preview": "package com.jayway.jsonpath.internal;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.InvalidModif"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/Utils.java",
    "chars": 16992,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/filter/Evaluator.java",
    "chars": 202,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport com.jayway.jsonpath.Predicate;\n\npublic interface Evaluator {\n    bo"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java",
    "chars": 17743,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport com.jayway.jsonpath.JsonPathException;\nimport com.jayway.jsonpath.P"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/filter/ExpressionNode.java",
    "chars": 1063,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport com.jayway.jsonpath.Predicate;\n\npublic abstract class ExpressionNod"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/filter/FilterCompiler.java",
    "chars": 17426,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport com.jayway.jsonpath.Filter;\nimport com.jayway.jsonpath.InvalidPathE"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/filter/LogicalExpressionNode.java",
    "chars": 2846,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport com.jayway.jsonpath.internal.Utils;\n\nimport java.util.ArrayList;\nim"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/filter/LogicalOperator.java",
    "chars": 846,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport com.jayway.jsonpath.InvalidPathException;\n\npublic enum LogicalOpera"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/filter/PatternFlag.java",
    "chars": 1382,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport java.util.regex.Pattern;\n\npublic enum PatternFlag {\n    UNIX_LINES("
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/filter/RelationalExpressionNode.java",
    "chars": 1457,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\npublic class Rel"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/filter/RelationalOperator.java",
    "chars": 1314,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport com.jayway.jsonpath.InvalidPathException;\n\nimport java.util.Locale;"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNode.java",
    "chars": 6744,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport com.jayway.jsonpath.InvalidPathException;\nimport com.jayway.jsonpat"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNodes.java",
    "chars": 20831,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport java.math.BigDecimal;\nimport java.time.OffsetDateTime;\nimport java."
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/ParamType.java",
    "chars": 139,
    "preview": "package com.jayway.jsonpath.internal.function;\n\n/**\n * Created by mgreenwood on 12/11/15.\n */\npublic enum ParamType {\n  "
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/Parameter.java",
    "chars": 3805,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.internal.EvaluationContext;\nimport com.jayway"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/PassthruPathFunction.java",
    "chars": 546,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.internal.EvaluationContext;\nimport com.jayway"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/PathFunction.java",
    "chars": 1363,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.internal.EvaluationContext;\nimport com.jayway"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/PathFunctionFactory.java",
    "chars": 3054,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.InvalidPathException;\nimport com.jayway.jsonp"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/json/Append.java",
    "chars": 1248,
    "preview": "package com.jayway.jsonpath.internal.function.json;\n\nimport com.jayway.jsonpath.internal.EvaluationContext;\nimport com.j"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/json/KeySetFunction.java",
    "chars": 753,
    "preview": "package com.jayway.jsonpath.internal.function.json;\n\nimport com.jayway.jsonpath.internal.EvaluationContext;\nimport com.j"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/latebinding/ILateBindingValue.java",
    "chars": 1216,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/latebinding/JsonLateBindingValue.java",
    "chars": 1578,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/latebinding/PathLateBindingValue.java",
    "chars": 2153,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/numeric/AbstractAggregation.java",
    "chars": 2055,
    "preview": "package com.jayway.jsonpath.internal.function.numeric;\n\nimport com.jayway.jsonpath.JsonPathException;\nimport com.jayway."
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/numeric/Average.java",
    "chars": 550,
    "preview": "package com.jayway.jsonpath.internal.function.numeric;\n\n/**\n * Provides the average of a series of numbers in a JSONArra"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/numeric/Max.java",
    "chars": 484,
    "preview": "package com.jayway.jsonpath.internal.function.numeric;\n\n/**\n * Defines the summation of a series of JSONArray numerical "
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/numeric/Min.java",
    "chars": 484,
    "preview": "package com.jayway.jsonpath.internal.function.numeric;\n\n/**\n * Defines the summation of a series of JSONArray numerical "
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/numeric/StandardDeviation.java",
    "chars": 601,
    "preview": "package com.jayway.jsonpath.internal.function.numeric;\n\n/**\n * Provides the standard deviation of a series of numbers\n *"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/numeric/Sum.java",
    "chars": 434,
    "preview": "package com.jayway.jsonpath.internal.function.numeric;\n\n/**\n * Defines the summation of a series of JSONArray numerical "
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/sequence/AbstractSequenceAggregation.java",
    "chars": 1938,
    "preview": "package com.jayway.jsonpath.internal.function.sequence;\n\nimport com.jayway.jsonpath.JsonPathException;\nimport com.jayway"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/sequence/First.java",
    "chars": 470,
    "preview": "package com.jayway.jsonpath.internal.function.sequence;\n\nimport com.jayway.jsonpath.internal.EvaluationContext;\nimport c"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/sequence/Index.java",
    "chars": 548,
    "preview": "package com.jayway.jsonpath.internal.function.sequence;\n\nimport com.jayway.jsonpath.internal.EvaluationContext;\nimport c"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/sequence/Last.java",
    "chars": 470,
    "preview": "package com.jayway.jsonpath.internal.function.sequence;\n\nimport com.jayway.jsonpath.internal.EvaluationContext;\nimport c"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/text/Concatenate.java",
    "chars": 1235,
    "preview": "package com.jayway.jsonpath.internal.function.text;\n\nimport com.jayway.jsonpath.internal.EvaluationContext;\nimport com.j"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/function/text/Length.java",
    "chars": 3173,
    "preview": "package com.jayway.jsonpath.internal.function.text;\n\nimport com.jayway.jsonpath.internal.EvaluationContext;\nimport com.j"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/ArrayIndexOperation.java",
    "chars": 1889,
    "preview": "package com.jayway.jsonpath.internal.path;\n\nimport com.jayway.jsonpath.InvalidPathException;\nimport com.jayway.jsonpath."
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/ArrayIndexToken.java",
    "chars": 1747,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/ArrayPathToken.java",
    "chars": 2102,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/ArraySliceOperation.java",
    "chars": 2333,
    "preview": "package com.jayway.jsonpath.internal.path;\n\nimport com.jayway.jsonpath.InvalidPathException;\n\nimport static java.lang.Ch"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/ArraySliceToken.java",
    "chars": 3751,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/CompiledPath.java",
    "chars": 4622,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/EvaluationContextImpl.java",
    "chars": 6418,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/FunctionPathToken.java",
    "chars": 4334,
    "preview": "package com.jayway.jsonpath.internal.path;\n\nimport com.jayway.jsonpath.internal.Path;\nimport com.jayway.jsonpath.interna"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java",
    "chars": 24990,
    "preview": "package com.jayway.jsonpath.internal.path;\n\nimport com.jayway.jsonpath.InvalidPathException;\nimport com.jayway.jsonpath."
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/PathToken.java",
    "chars": 8743,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/PathTokenAppender.java",
    "chars": 138,
    "preview": "package com.jayway.jsonpath.internal.path;\n\npublic interface PathTokenAppender {\n    PathTokenAppender appendPathToken(P"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/PathTokenFactory.java",
    "chars": 1726,
    "preview": "package com.jayway.jsonpath.internal.path;\n\nimport com.jayway.jsonpath.Predicate;\nimport com.jayway.jsonpath.internal.fu"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/PredicateContextImpl.java",
    "chars": 2767,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/PredicatePathToken.java",
    "chars": 3469,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/PropertyPathToken.java",
    "chars": 3925,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/RootPathToken.java",
    "chars": 2284,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/ScanPathToken.java",
    "chars": 7449,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/internal/path/WildcardPathToken.java",
    "chars": 1942,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/cache/Cache.java",
    "chars": 518,
    "preview": "package com.jayway.jsonpath.spi.cache;\n\nimport com.jayway.jsonpath.InvalidJsonException;\nimport com.jayway.jsonpath.Json"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/cache/CacheProvider.java",
    "chars": 1920,
    "preview": "package com.jayway.jsonpath.spi.cache;\n\nimport com.jayway.jsonpath.JsonPathException;\n\nimport java.util.concurrent.atomi"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/cache/LRUCache.java",
    "chars": 2843,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/cache/NOOPCache.java",
    "chars": 273,
    "preview": "package com.jayway.jsonpath.spi.cache;\n\nimport com.jayway.jsonpath.JsonPath;\n\npublic class NOOPCache implements Cache {\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/json/AbstractJsonProvider.java",
    "chars": 5067,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/json/GsonJsonProvider.java",
    "chars": 8480,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/json/Jackson3JsonNodeJsonProvider.java",
    "chars": 9336,
    "preview": "package com.jayway.jsonpath.spi.json;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.InputStrea"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/json/Jackson3JsonProvider.java",
    "chars": 3798,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java",
    "chars": 9349,
    "preview": "package com.jayway.jsonpath.spi.json;\n\nimport com.fasterxml.jackson.databind.JsonNode;\nimport com.fasterxml.jackson.data"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonProvider.java",
    "chars": 3915,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/json/JakartaJsonProvider.java",
    "chars": 30544,
    "preview": "package com.jayway.jsonpath.spi.json;\r\n\r\nimport com.jayway.jsonpath.InvalidJsonException;\r\nimport com.jayway.jsonpath.Js"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/json/JettisonProvider.java",
    "chars": 10043,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonOrgJsonProvider.java",
    "chars": 6209,
    "preview": "package com.jayway.jsonpath.spi.json;\n\nimport org.json.JSONObject;\nimport com.jayway.jsonpath.InvalidJsonException;\nimpo"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonProvider.java",
    "chars": 4951,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonSmartJsonProvider.java",
    "chars": 3144,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/json/TapestryJsonProvider.java",
    "chars": 2626,
    "preview": "package com.jayway.jsonpath.spi.json;\n\nimport com.jayway.jsonpath.InvalidJsonException;\nimport org.apache.tapestry5.json"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/mapper/GsonMappingProvider.java",
    "chars": 2759,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/mapper/Jackson3MappingProvider.java",
    "chars": 1903,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JacksonMappingProvider.java",
    "chars": 1912,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JakartaMappingProvider.java",
    "chars": 26132,
    "preview": "/*\r\n * Copyright 2011 the original author or authors.\r\n * Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonOrgMappingProvider.java",
    "chars": 1806,
    "preview": "package com.jayway.jsonpath.spi.mapper;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.TypeRef;\ni"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java",
    "chars": 10246,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/mapper/MappingException.java",
    "chars": 915,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/mapper/MappingProvider.java",
    "chars": 1505,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/main/java/com/jayway/jsonpath/spi/mapper/TapestryMappingProvider.java",
    "chars": 1959,
    "preview": "/*\n * Copyright 2011 the original author or authors.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/BaseTest.java",
    "chars": 7565,
    "preview": "package com.jayway.jsonpath;\n\nimport com.jayway.jsonpath.internal.Path;\nimport com.jayway.jsonpath.internal.path.Predica"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/Configurations.java",
    "chars": 3657,
    "preview": "package com.jayway.jsonpath;\n\nimport com.jayway.jsonpath.spi.json.GsonJsonProvider;\nimport com.jayway.jsonpath.spi.json."
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/DeepScanTest.java",
    "chars": 11995,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\n"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/EscapeTest.java",
    "chars": 1038,
    "preview": "package com.jayway.jsonpath;\n\nimport net.minidev.json.JSONStyle;\nimport net.minidev.json.JSONValue;\nimport org.junit.jup"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/EvaluationListenerTest.java",
    "chars": 4356,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nim"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java",
    "chars": 6668,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport static com.jayway.jsonpath.internal.filter.Filt"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/FilterParseTest.java",
    "chars": 8077,
    "preview": "package com.jayway.jsonpath;\n\nimport org.assertj.core.api.Assertions;\nimport org.junit.jupiter.api.Test;\n\nimport java.ut"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/FilterTest.java",
    "chars": 26920,
    "preview": "package com.jayway.jsonpath;\n\nimport org.assertj.core.util.Lists;\nimport org.junit.jupiter.api.Test;\n\nimport java.util.H"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/GsonJsonProviderTest.java",
    "chars": 8157,
    "preview": "package com.jayway.jsonpath;\n\nimport com.google.gson.JsonArray;\nimport com.google.gson.JsonElement;\nimport com.google.gs"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/InlineFilterTest.java",
    "chars": 12085,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\nimport org.junit.jupiter.params.ParameterizedTest;\nimpo"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/Issue_487.java",
    "chars": 933,
    "preview": "package com.jayway.jsonpath;\r\n\r\nimport org.junit.jupiter.api.Test;\r\n\r\npublic class Issue_487 {\r\n\r\n    public static fina"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/Issue_537.java",
    "chars": 967,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport java.util.List;\n\npublic class Issue_537 {\n\n    "
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/Issue_721.java",
    "chars": 1263,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\npublic class Issue_721 {\n\n    public static final Conf"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/Issue_762.java",
    "chars": 437,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\n\n/**\n * test for issue 762\n */\n\npublic class Issue_762"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/Issue_786.java",
    "chars": 560,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport static org.assertj.core.api.Assertions.assertTh"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/Issue_970.java",
    "chars": 302,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport static org.assertj.core.api.Assertions.assertTh"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/Issue_973.java",
    "chars": 287,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport static org.assertj.core.api.Assertions.*;\n\npubl"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/Jackson3JsonNodeJsonProviderMapperSupportTest.java",
    "chars": 6731,
    "preview": "package com.jayway.jsonpath;\n\nimport java.util.Arrays;\nimport java.util.List;\n\nimport tools.jackson.databind.JsonNode;\ni"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/Jackson3JsonNodeJsonProviderTest.java",
    "chars": 11359,
    "preview": "package com.jayway.jsonpath;\n\nimport java.io.IOException;\nimport java.math.BigDecimal;\nimport java.math.BigInteger;\nimpo"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/Jackson3Test.java",
    "chars": 2513,
    "preview": "package com.jayway.jsonpath;\n\nimport java.util.Date;\n\nimport org.junit.jupiter.api.Test;\n\nimport static java.nio.charset"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderMapperSupportTest.java",
    "chars": 6742,
    "preview": "package com.jayway.jsonpath;\n\nimport com.fasterxml.jackson.databind.JsonNode;\nimport com.fasterxml.jackson.databind.Obje"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java",
    "chars": 11204,
    "preview": "package com.jayway.jsonpath;\n\nimport com.fasterxml.jackson.annotation.JsonCreator;\nimport com.fasterxml.jackson.annotati"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/JacksonTest.java",
    "chars": 2506,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport java.util.Date;\n\nimport static java.nio.charset"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/JakartaJsonProviderTest.java",
    "chars": 15369,
    "preview": "package com.jayway.jsonpath;\r\n\r\nimport jakarta.json.JsonObject;\r\nimport jakarta.json.JsonString;\r\nimport org.junit.jupit"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java",
    "chars": 3522,
    "preview": "package com.jayway.jsonpath;\n\nimport com.jayway.jsonpath.spi.json.JsonOrgJsonProvider;\nimport com.jayway.jsonpath.spi.ma"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/JsonProviderTest.java",
    "chars": 1158,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.params.ParameterizedTest;\nimport org.junit.jupiter.params.provide"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/JsonProviderTestObjectMapping.java",
    "chars": 2249,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.params.ParameterizedTest;\nimport org.junit.jupiter.params.provide"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/MapperTest.java",
    "chars": 1931,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport java.math.BigDecimal;\nimport java.math.BigInteg"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/MultiPropTest.java",
    "chars": 4746,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Assertions;\nimport org.junit.jupiter.api.Test;\n\nimport java.u"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/OptionsTest.java",
    "chars": 6259,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport java.util.Arrays;\nimport java.util.HashMap;\nimp"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java",
    "chars": 11417,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Disabled;\nimport org.junit.jupiter.api.Test;\n\nimport java.uti"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/PredicateTest.java",
    "chars": 781,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport s"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/ProviderInTest.java",
    "chars": 8913,
    "preview": "package com.jayway.jsonpath;\n\nimport com.fasterxml.jackson.databind.node.ArrayNode;\nimport com.google.gson.JsonArray;\nim"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/ReadContextTest.java",
    "chars": 1088,
    "preview": "package com.jayway.jsonpath;\n\nimport org.assertj.core.api.Assertions;\nimport org.junit.jupiter.api.Test;\n\nimport static "
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/ReturnTypeTest.java",
    "chars": 2765,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport s"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/ScientificNotationTest.java",
    "chars": 1642,
    "preview": "package com.jayway.jsonpath;\n\nimport com.google.gson.JsonArray;\nimport org.junit.jupiter.api.Test;\n\nimport java.util.Lis"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/TapestryJsonProviderTest.java",
    "chars": 1312,
    "preview": "package com.jayway.jsonpath;\n\nimport static com.jayway.jsonpath.JsonPath.using;\nimport static org.assertj.core.api.Asser"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/TestSuppressExceptions.java",
    "chars": 2648,
    "preview": "package com.jayway.jsonpath;\n\nimport com.jayway.jsonpath.spi.json.Jackson3JsonProvider;\nimport com.jayway.jsonpath.spi.j"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/TestUtils.java",
    "chars": 2553,
    "preview": "package com.jayway.jsonpath;\n\nimport static com.jayway.jsonpath.JsonPath.using;\nimport static org.assertj.core.api.Asser"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/WriteTest.java",
    "chars": 10663,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport java.io.InputStream;\nimport java.util.HashMap;\n"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/JsonContextTest.java",
    "chars": 945,
    "preview": "package com.jayway.jsonpath.internal;\n\nimport com.jayway.jsonpath.BaseTest;\nimport com.jayway.jsonpath.Criteria;\nimport "
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/UtilsTest.java",
    "chars": 5374,
    "preview": "package com.jayway.jsonpath.internal;\n\nimport com.jayway.jsonpath.JsonPathException;\nimport org.junit.jupiter.api.Assert"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/filter/PatternFlagTest.java",
    "chars": 1240,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport com.jayway.jsonpath.BaseTest;\nimport org.junit.jupiter.params.Param"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/filter/RegexpEvaluatorTest.java",
    "chars": 3609,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport com.jayway.jsonpath.BaseTest;\nimport com.jayway.jsonpath.Predicate;"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/filter/RelationalOperatorTest.java",
    "chars": 1068,
    "preview": "package com.jayway.jsonpath.internal.filter;\n\nimport org.junit.jupiter.api.AfterEach;\nimport org.junit.jupiter.api.Befor"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/function/BaseFunctionTest.java",
    "chars": 2216,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.Configuration;\n\nimport java.io.IOException;\ni"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/function/Issue191.java",
    "chars": 2939,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.Con"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/function/Issue234.java",
    "chars": 1421,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.JsonPath;\nimport org.junit.jupiter.api.Test;\n"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/function/Issue273.java",
    "chars": 4098,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.JsonPath;\nimport net.minidev.json.JSONArray;\n"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/function/Issue612.java",
    "chars": 1246,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.Doc"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/function/Issue629.java",
    "chars": 990,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.JsonPath;\nimport org.junit.jupiter.api.Test;\n"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/function/Issue680.java",
    "chars": 1442,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.JsonPath;\nimport org.junit.jupiter.api.Test;\n"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/function/JSONEntityPathFunctionTest.java",
    "chars": 3831,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.Con"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/function/KeySetFunctionTest.java",
    "chars": 727,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.Con"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/function/NestedFunctionTest.java",
    "chars": 4378,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.Con"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/function/NumericPathFunctionTest.java",
    "chars": 4034,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.Con"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/function/SequentialPathFunctionTest.java",
    "chars": 1537,
    "preview": "package com.jayway.jsonpath.internal.function;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.Con"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/internal/path/PathTokenTest.java",
    "chars": 1750,
    "preview": "package com.jayway.jsonpath.internal.path;\n\nimport com.jayway.jsonpath.BaseTest;\nimport org.junit.jupiter.api.Test;\n\nimp"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/issue_613.java",
    "chars": 1741,
    "preview": "package com.jayway.jsonpath;\n\nimport org.junit.jupiter.api.Test;\n\nimport java.time.OffsetDateTime;\nimport java.time.Zone"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/ArraySlicingTest.java",
    "chars": 2828,
    "preview": "package com.jayway.jsonpath.old;\n\nimport com.jayway.jsonpath.JsonPath;\nimport org.hamcrest.Matchers;\nimport org.junit.ju"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/ComplianceTest.java",
    "chars": 5753,
    "preview": "package com.jayway.jsonpath.old;\n\nimport com.jayway.jsonpath.JsonPath;\nimport org.hamcrest.Matchers;\nimport org.junit.ju"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/FilterTest.java",
    "chars": 21024,
    "preview": "package com.jayway.jsonpath.old;\n\nimport com.jayway.jsonpath.*;\nimport com.jayway.jsonpath.spi.json.JsonProvider;\nimport"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/IssuesTest.java",
    "chars": 38393,
    "preview": "package com.jayway.jsonpath.old;\n\nimport com.fasterxml.jackson.databind.node.ObjectNode;\nimport com.google.gson.JsonObje"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/JsonPathTest.java",
    "chars": 13561,
    "preview": "package com.jayway.jsonpath.old;\n\nimport com.jayway.jsonpath.*;\nimport com.jayway.jsonpath.internal.path.PathCompiler;\ni"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/JsonProviderTest.java",
    "chars": 2378,
    "preview": "package com.jayway.jsonpath.old;\n\nimport com.jayway.jsonpath.spi.json.JacksonJsonProvider;\nimport org.junit.jupiter.api."
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/NullHandlingTest.java",
    "chars": 2786,
    "preview": "package com.jayway.jsonpath.old;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.JsonPath;\nimport "
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/internal/ArrayIndexFilterTest.java",
    "chars": 1552,
    "preview": "package com.jayway.jsonpath.old.internal;\n\nimport com.jayway.jsonpath.JsonPath;\nimport org.hamcrest.Matchers;\nimport org"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/internal/ArrayPathTokenTest.java",
    "chars": 1913,
    "preview": "package com.jayway.jsonpath.old.internal;\n\nimport org.junit.jupiter.api.Test;\n\nimport java.util.List;\nimport java.util.M"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/internal/PredicatePathTokenTest.java",
    "chars": 4297,
    "preview": "package com.jayway.jsonpath.old.internal;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.JsonPath"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/internal/PropertyPathTokenTest.java",
    "chars": 2690,
    "preview": "package com.jayway.jsonpath.old.internal;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.JsonPath"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/internal/ScanPathTokenTest.java",
    "chars": 8432,
    "preview": "package com.jayway.jsonpath.old.internal;\n\nimport com.jayway.jsonpath.Configuration;\nimport com.jayway.jsonpath.internal"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/internal/TestBase.java",
    "chars": 2824,
    "preview": "package com.jayway.jsonpath.old.internal;\n\nimport com.jayway.jsonpath.Configuration;\n\n/**\n *\n */\npublic class TestBase {"
  },
  {
    "path": "json-path/src/test/java/com/jayway/jsonpath/old/internal/TestInternal3.java",
    "chars": 1805,
    "preview": "package com.jayway.jsonpath.old.internal;\n\nimport org.junit.jupiter.api.Test;\n\nimport java.util.List;\nimport java.util.M"
  },
  {
    "path": "json-path/src/test/resources/issue_191.json",
    "chars": 49512,
    "preview": "{\n    \"activated_slaves\": 5,\n    \"build_date\": \"2015-01-09 02:25:21\",\n    \"build_time\": 1420770321,\n    \"build_user\": \"r"
  },
  {
    "path": "json-path/src/test/resources/issue_24.json",
    "chars": 10239,
    "preview": "{\n    \"project\": {\n        \"@key\": \"Signaturengruppe ars.hydr.\",\n        \"template\": [\n            {\n                \"@k"
  },
  {
    "path": "json-path/src/test/resources/issue_76.json",
    "chars": 49512,
    "preview": "{\n    \"activated_slaves\": 5,\n    \"build_date\": \"2015-01-09 02:25:21\",\n    \"build_time\": 1420770321,\n    \"build_user\": \"r"
  },
  {
    "path": "json-path/src/test/resources/issue_76_2.json",
    "chars": 67,
    "preview": "{\n    \"cpus\": -8.88178419700125e-16,\n    \"disk\": 0,\n    \"mem\": 0\n}\n"
  },
  {
    "path": "json-path/src/test/resources/json-test-doc.json",
    "chars": 747,
    "preview": "{\n    \"id\": 100,\n    \"type\": \"donut\",\n    \"name\": \"Cake\",\n    \"available\": true,\n    \"ppu\": 0.55,\n    \"batters\":\n    {\n "
  },
  {
    "path": "json-path/src/test/resources/json_array.json",
    "chars": 445,
    "preview": "\n\n\n{\n    \"arr\": [\n        {\n            \"obj\":{\"innerArr\": [\n                {\n                    \"val\": \"bla_0\"\n      "
  },
  {
    "path": "json-path/src/test/resources/json_array_multiple_delete.json",
    "chars": 841,
    "preview": "{\n  \"_embedded\": {\n    \"mandates\": [\n      {\n        \"count\": \"0\",\n        \"difference\": \"+0\"\n      },\n      {\n        \""
  },
  {
    "path": "json-path/src/test/resources/keyset.json",
    "chars": 49,
    "preview": "{\n  \"data\" : {\n    \"a\" : \"a\",\n    \"b\" : \"b\"\n  }\n}"
  },
  {
    "path": "json-path/src/test/resources/simplelogger.properties",
    "chars": 199,
    "preview": "#org.slf4j.simpleLogger.log.com.jayway=debug\n#org.slf4j.simpleLogger.log.com.jayway.jsonpath.internal.filter=trace\n#org."
  }
]

// ... and 35 more files (download for full content)

About this extraction

This page contains the full source code of the json-path/JsonPath GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 235 files (1.0 MB), approximately 254.0k tokens, and a symbol index with 2357 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!