Releases: DimQ1/JsonPathPlus
Releases · DimQ1/JsonPathPlus
v1.6.2
Full Changelog: v1.6.1...v1.6.2
v1.6.1
Full Changelog: v1.6.0...v1.6.1
v1.6.0: Nested Queries, Zero-Allocation String Ops & Multi-Targeting
What's new in v1.6.0
Multi-targeting (net8.0, net9.0, net10.0, net11.0)
- Library now targets .NET 8, 9, 10, and 11 with a single package.
- Added proper NuGet repository metadata (RepositoryUrl, RepositoryType).
What's new in v1.5.0
Nested Query Support
- Apply sub-paths per key in bracket expressions: \$.store[book[?(@.price<20)][title,author], bicycle[color], name]\
- Combine filters, field projections, and property access in a single nested expression.
Zero-Allocation String Overloads
- String-based extension methods now use stream extraction internally.
- Eliminates UTF-8 encoding and MemoryStream allocations for string inputs.
- Same extraction engine, zero intermediate allocations.
Pooled Buffer Streaming
- Replaced
ew byte[]\ with \ArrayPool\ in \ReadToEndAsync. - Reduces LOH (Large Object Heap) pressure for large payloads.
Benchmarks
- Added nested query benchmarks across all input types (Stream, JsonNode, string).
Validation
- All 450+ tests pass across net8.0, net9.0, net10.0, net11.0.
v1.4.0: Memory Optimization & Large-File Streaming Foundation
What's new
Phase 2.2: First-match short-circuit traversal
- \ExtractFirst...\ APIs now use a recursive \TryFindFirstMatch\ traversal that stops at the first match without building intermediate result lists.
- Covers all 13 segment types: Property, ArrayIndex, ArrayRange, ArrayUnion, PropertyUnion, Filter, ComputedIndex, Wildcard, RecursiveDescent, FieldProjection, FieldExclusion, FieldExistence, FieldCount.
- Major allocation reduction for first-match queries over large arrays.
LFS-1: Seekless root detection
- Replaced \StreamReader-based peek with raw byte-level \PeekRootKindFromBytes\ — zero allocation for seekable streams.
- New \StreamHead\ type flows peek result to extract methods, eliminating duplicate peeking.
- \CanUseStreaming\ no longer requires \stream.CanSeek\ — non-seekable streams are now supported.
- Eliminated \GetRootContainerKind\ and \TryPeekRootToken\ (dead code).
Library evolution plan
- Updated \stream-performance-plan.md\ with large-file streaming requirements and phased roadmap.
- Set core library requirements: 1 KB → 1 GB payload range, non-seekable stream support, \JsonElement\ return types, \MaxMaterializationBytes\ budget enforcement.
Performance
- Allocation reduced 61–89% across all stream benchmarks vs v1.0 baseline.
- Gen2 GC eliminated on wildcard/range stream benchmarks.
Validation
- 450/450 tests pass across net8.0, net9.0, net10.0.