This file is for contributor/agent operational notes. Read json-java21-jsonpath/README.md for purpose, supported syntax, and user-facing examples.
- User docs MUST recommend only
./mvnw. - The
$(command -v mvnd || command -v mvn || command -v ./mvnw)wrapper is for local developer speed only; do not put it in user-facing docs.
JsonPath is a sealed interface with two implementations:
JsonPathInterpreted: AST-walking interpreter (default fromJsonPath.parse())JsonPathCompiled: Bytecode-compiled version (fromJsonPath.compile())
The compilation flow:
JsonPath.parse()->JsonPathInterpreted(fast parsing, AST-based evaluation)JsonPath.compile()->JsonPathCompiled(generates Java source, compiles with JDK ToolProvider)
json-java21-jsonpath/src/main/java/json/java21/jsonpath/JsonPath.java- Public sealed interfacejson-java21-jsonpath/src/main/java/json/java21/jsonpath/JsonPathParser.java- Parses expressions to ASTjson-java21-jsonpath/src/main/java/json/java21/jsonpath/JsonPathAst.java- AST node definitionsjson-java21-jsonpath/src/main/java/json/java21/jsonpath/JsonPathInterpreted.java- AST-walking evaluatorjson-java21-jsonpath/src/main/java/json/java21/jsonpath/JsonPathCompiler.java- Code generator and compilerjson-java21-jsonpath/src/main/java/json/java21/jsonpath/JsonPathCompiled.java- Compiled executor wrapperjson-java21-jsonpath/src/main/java/json/java21/jsonpath/JsonPathExecutor.java- Public interface for generated executorsjson-java21-jsonpath/src/main/java/json/java21/jsonpath/JsonPathHelpers.java- Helpers for generated codejson-java21-jsonpath/src/main/java/json/java21/jsonpath/JsonPathStreams.java- Stream processing utilities
- Update
JsonPathAst+JsonPathParser+JsonPathInterpretedtogether. - Update
JsonPathCompilercode generation to match any AST changes. - Add parser + evaluation tests; new tests should extend
JsonPathLoggingConfig. - Add compiler tests in
JsonPathCompilerTestto verify compiled and interpreted produce identical results.
The JsonPathCompiler generates Java source code that:
- Imports from
jdk.sandbox.java.util.json.*andjson.java21.jsonpath.* - Implements
JsonPathExecutorfunctional interface - Uses
JsonPathHelpersfor complex operations (recursive descent, comparisons) - Is compiled in-memory using
javax.tools.ToolProvider
When adding new AST node types:
- Add the case to
generateSegmentEvaluation()inJsonPathCompiler - Consider if a helper method in
JsonPathHelperswould simplify the generated code